public void PredictTest1()
{
// Data from: http://statpages.org/prophaz2.html
double[,] data =
{
{ 50, 1, 0 },
{ 70, 2, 1 },
{ 45, 3, 0 },
{ 35, 5, 0 },
{ 62, 7, 1 },
{ 50, 11, 0 },
{ 45, 4, 0 },
{ 57, 6, 0 },
{ 32, 8, 0 },
{ 57, 9, 1 },
{ 60, 10, 1 },
};
var regression = new ProportionalHazards(1);
double[][] inputs = data.GetColumn(0).ToJagged();
double[] time = data.GetColumn(1);
int[] censor = data.GetColumn(2).ToInt32();
var target = new ProportionalHazardsNewtonRaphson(regression);
double error = target.Run(inputs, time, censor);
// Tested against http://statpages.org/prophaz2.html
Assert.AreEqual(0.3770, regression.Coefficients[0], 1e-4);
Assert.AreEqual(0.2542, regression.StandardErrors[0], 1e-4);
Assert.AreEqual(51.18181818181818, regression.Offsets[0]);
double mean = regression.Offsets[0];
// Baseline survivor function at predictor means
double[] baseline =
{
regression.Survival(2),
regression.Survival(7),
regression.Survival(9),
regression.Survival(10),
};
// Tested against http://statpages.org/prophaz2.html
Assert.AreEqual(0.9979, baseline[0], 1e-4);
Assert.AreEqual(0.9820, baseline[1], 1e-4);
Assert.AreEqual(0.9525, baseline[2], 1e-4);
Assert.AreEqual(0.8310, baseline[3], 1e-4);
double[] expected =
{
0, 2.51908236823927, 0.000203028311170645, 4.67823782106946E-06, 1.07100164957025,
0.118590728553659, 0.000203028311170645, 0.0187294821517496, 1.31028937819308E-05,
0.436716853556834, 5.14665484304978
};
double[] actual = new double[inputs.Length];
for (int i = 0; i < inputs.Length; i++)
{
double a = actual[i] = regression.Compute(inputs[i], time[i]);
double e = expected[i];
Assert.AreEqual(e, a, 1e-3);
}
// string exStr = actual.ToString(CSharpArrayFormatProvider.InvariantCulture);
}