public void ReceiverOperatingCharacteristicConstructorTest2()
{
double[] measurement = { 0, 0, 0, 0, 0, 1, 1, 1 };
double[] prediction = { 0, 0, 0.5, 0.5, 1, 1, 1, 1 };
ReceiverOperatingCharacteristic target = new ReceiverOperatingCharacteristic(measurement, prediction);
target.Compute(0.5, true);
Assert.AreEqual(target.Points.Count, 4);
var p1 = target.Points[0];
var p2 = target.Points[1];
var p3 = target.Points[2];
var p4 = target.Points[3];
Assert.AreEqual(p1.Sensitivity, 1);
Assert.AreEqual(1 - p1.Specificity, 1);
Assert.AreEqual(p4.Sensitivity, 0);
Assert.AreEqual(1 - p4.Specificity, 0);
target.Compute(0.5, false);
Assert.AreEqual(target.Points.Count, 3);
target.Compute(new double[] { 0.0, 0.4, 0.6, 1.0 });
Assert.AreEqual(target.Points.Count, 4);
Assert.AreEqual(target.Negatives, 5);
Assert.AreEqual(target.Positives, 3);
Assert.AreEqual(target.Observations, 8);
foreach (var point in target.Points)
{
Assert.AreEqual(point.Samples, 8);
Assert.AreEqual(point.ActualNegatives, 5);
Assert.AreEqual(point.ActualPositives, 3);
if (point.Cutoff == 0.0)
{
Assert.AreEqual(point.PredictedNegatives, 0);
Assert.AreEqual(point.PredictedPositives, 8);
}
else if (point.Cutoff == 0.4)
{
Assert.AreEqual(point.PredictedNegatives, 2);
Assert.AreEqual(point.PredictedPositives, 6);
}
else
{
Assert.AreEqual(point.PredictedNegatives, 4);
Assert.AreEqual(point.PredictedPositives, 4);
}
}
Assert.AreEqual(target.Area, 0.8);
// Assert.AreEqual(target.StandardError, 0.1821680136170595); // HanleyMcNeil
Assert.AreEqual(0.1, target.StandardError); // De Long
}