public StuartMaxwellTest(GeneralConfusionMatrix matrix)
{
int classes = matrix.Classes;
int samples = matrix.Samples;
int df = classes - 1;
int[] rowMarginals = matrix.RowTotals;
int[] colMarginals = matrix.ColumnTotals;
d = new double[df];
for (int i = 0; i < d.Length; i++)
d[i] = rowMarginals[i] - colMarginals[i];
S = new double[df, df];
for (int i = 0; i < df; i++)
{
for (int j = 0; j < df; j++)
{
if (i == j)
{
// double u = (rowMarginals[i] - colMarginals[i]);
double pii = matrix.Matrix[i, i];
S[i, i] = rowMarginals[i] + colMarginals[i] - 2.0 * pii;
}
else
{
double pij = matrix.Matrix[i, j];
double pji = matrix.Matrix[j, i];
S[i, j] = -(pij + pji);
}
}
}
invS = S.PseudoInverse();
double chiSquare = d.DotAndDot(invS, d);
Compute(chiSquare, df);
}