public void KappaVarianceTest1()
{
// Example from Ientilucci, Emmett (2006). "On Using and Computing the Kappa Statistic".
// Available on: http://www.cis.rit.edu/~ejipci/Reports/On_Using_and_Computing_the_Kappa_Statistic.pdf
// Note: Congalton's method uses the Delta Method for approximating the Kappa variance.
{
int[,] matrix = // Matrix A (page 1)
{
{ 317, 23, 0, 0 },
{ 61, 120, 0, 0 },
{ 2, 4, 60, 0 },
{ 35, 29, 0, 8 },
};
GeneralConfusionMatrix a = new GeneralConfusionMatrix(matrix);
// Method A row totals (page 2)
Assert.AreEqual(340, a.RowTotals[0]);
Assert.AreEqual(181, a.RowTotals[1]);
Assert.AreEqual(66, a.RowTotals[2]);
Assert.AreEqual(72, a.RowTotals[3]);
// Method A col totals (page 2)
Assert.AreEqual(415, a.ColumnTotals[0]);
Assert.AreEqual(176, a.ColumnTotals[1]);
Assert.AreEqual(60, a.ColumnTotals[2]);
Assert.AreEqual(8, a.ColumnTotals[3]);
// Number of samples for A (page 2)
Assert.AreEqual(659, a.Samples);
Assert.AreEqual(4, a.Classes);
// Po for A (page 2)
Assert.AreEqual(0.7663, a.OverallAgreement, 1e-4);
Assert.IsFalse(double.IsNaN(a.OverallAgreement));
// Pc for A (page 3)
Assert.AreEqual(0.4087, a.ChanceAgreement, 1e-5);
Assert.IsFalse(double.IsNaN(a.ChanceAgreement));
// Kappa value k_hat for A (page 3)
Assert.AreEqual(0.605, a.Kappa, 1e-3);
Assert.IsFalse(double.IsNaN(a.Kappa));
double var = a.Variance;
double var0 = a.VarianceUnderNull;
double varD = Accord.Statistics.Testing.KappaTest.DeltaMethodKappaVariance(a);
// Variance value var_k for A (page 4)
Assert.AreEqual(0.00073735, varD, 1e-8);
Assert.AreEqual(0.00071760415564207924, var, 1e-10);
Assert.AreEqual(0.00070251065008366978, var0, 1e-10);
Assert.IsFalse(double.IsNaN(var));
Assert.IsFalse(double.IsNaN(var0));
Assert.IsFalse(double.IsNaN(varD));
}
{
int[,] matrix = // Matrix B
{
{ 377, 79, 0, 0 },
{ 2, 72, 0, 0 },
{ 33, 5, 60, 0 },
{ 3, 20, 0, 8 },
};
GeneralConfusionMatrix b = new GeneralConfusionMatrix(matrix);
// Method B row totals (page 2)
Assert.AreEqual(456, b.RowTotals[0]);
Assert.AreEqual(74, b.RowTotals[1]);
Assert.AreEqual(98, b.RowTotals[2]);
Assert.AreEqual(31, b.RowTotals[3]);
// Method B col totals (page 2)
Assert.AreEqual(415, b.ColumnTotals[0]);
Assert.AreEqual(176, b.ColumnTotals[1]);
Assert.AreEqual(60, b.ColumnTotals[2]);
Assert.AreEqual(8, b.ColumnTotals[3]);
// Number of samples for B (page 2)
Assert.AreEqual(659, b.Samples);
Assert.AreEqual(4, b.Classes);
// Po for B (page 2)
Assert.AreEqual(0.7845, b.OverallAgreement, 1e-4);
Assert.IsFalse(double.IsNaN(b.OverallAgreement));
// Pc for B (page 3)
Assert.AreEqual(0.47986, b.ChanceAgreement, 1e-5);
Assert.IsFalse(double.IsNaN(b.ChanceAgreement));
// Kappa value k_hat for B (page 3)
Assert.AreEqual(0.586, b.Kappa, 1e-3);
Assert.IsFalse(double.IsNaN(b.Kappa));
double var = b.Variance;
double var0 = b.VarianceUnderNull;
double varD = Accord.Statistics.Testing.KappaTest.DeltaMethodKappaVariance(b);
// Variance value var_k for A (page 4)
Assert.AreEqual(0.00087457, varD, 1e-8);
Assert.AreEqual(0.00083016849579382347, var, 1e-10);
Assert.AreEqual(0.00067037111046188824, var0, 1e-10);
Assert.IsFalse(double.IsNaN(var));
Assert.IsFalse(double.IsNaN(var0));
Assert.IsFalse(double.IsNaN(varD));
}
}