public void KappaTestConstructorTest2()
{
// Example from Congalton
int[,] matrix1 = // pg 108
{
{ 65, 4, 22, 24 },
{ 6, 81, 5, 8 },
{ 0, 11, 85, 19 },
{ 4, 7, 3, 90 },
};
GeneralConfusionMatrix a = new GeneralConfusionMatrix(matrix1);
Assert.AreEqual(115, a.RowTotals[0]);
Assert.AreEqual(100, a.RowTotals[1]);
Assert.AreEqual(115, a.RowTotals[2]);
Assert.AreEqual(104, a.RowTotals[3]);
Assert.AreEqual(75, a.ColumnTotals[0]);
Assert.AreEqual(103, a.ColumnTotals[1]);
Assert.AreEqual(115, a.ColumnTotals[2]);
Assert.AreEqual(141, a.ColumnTotals[3]);
int[,] matrix2 = // pg 109
{
{ 45, 4, 12, 24 },
{ 6, 91, 5, 8 },
{ 0, 8, 55, 9 },
{ 4, 7, 3, 55 },
};
GeneralConfusionMatrix b = new GeneralConfusionMatrix(matrix2);
Assert.AreEqual(85, b.RowTotals[0]);
Assert.AreEqual(110, b.RowTotals[1]);
Assert.AreEqual(72, b.RowTotals[2]);
Assert.AreEqual(69, b.RowTotals[3]);
Assert.AreEqual(55, b.ColumnTotals[0]);
Assert.AreEqual(110, b.ColumnTotals[1]);
Assert.AreEqual(75, b.ColumnTotals[2]);
Assert.AreEqual(96, b.ColumnTotals[3]);
// Check overall accuracy
Assert.AreEqual(0.74, a.OverallAgreement, 0.005);
Assert.AreEqual(0.73, b.OverallAgreement, 0.005);
double kA = a.Kappa;
double kB = b.Kappa;
double varA = KappaTest.DeltaMethodKappaVariance(a);
double varB = KappaTest.DeltaMethodKappaVariance(b);
// Create the test
TwoMatrixKappaTest target = new TwoMatrixKappaTest(kA, varA, kB, varB);
Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, target.Hypothesis);
Assert.AreEqual(DistributionTail.TwoTail, target.Tail);
// Compare Kappas (pg 109)
Assert.AreEqual(0.65, target.EstimatedValue1, 0.05);
Assert.IsFalse(double.IsNaN(a.Kappa));
Assert.AreEqual(0.64, target.EstimatedValue2, 0.05);
Assert.IsFalse(double.IsNaN(b.Kappa));
// Compare variances:
Assert.AreEqual(0.0007778, target.Variance1, 1e-7);
Assert.IsFalse(double.IsNaN(a.Variance));
Assert.AreEqual(0.0010233, target.Variance2, 1e-7);
Assert.IsFalse(double.IsNaN(b.Variance));
Assert.AreEqual(0.3087, target.Statistic, 1e-5);
Assert.IsFalse(double.IsNaN(target.Statistic));
Assert.IsFalse(target.Significant);
}