public void NelsonAalenTest1()
{
// Example from
// http://sas-and-r.blogspot.fr/2010/05/example-738-kaplan-meier-survival.html
// http://sas-and-r.blogspot.fr/2010/05/example-739-nelson-aalen-estimate-of.html
double[] times;
SurvivalOutcome[] censor;
CreateExample1(out times, out censor);
// Test with Breslow method
{
var distribution = EmpiricalHazardDistribution.Estimate(times, censor, HazardTiesMethod.Breslow);
double[] expectedCHF =
{
0.0000000, 0.1111111, 0.1111111, 0.1736111, 0.1736111, 0.2450397, 0.3219628,
0.3219628, 0.4128719, 0.4128719, 0.5239830, 0.6489830, 0.6489830, 0.8156496,
1.0156496, 1.0156496, 1.0156496, 1.5156496, 1.5156496
};
double[] actualCHF = times.Apply(distribution.CumulativeHazardFunction);
for (int i = 0; i < actualCHF.Length; i++)
Assert.AreEqual(expectedCHF[i], actualCHF[i], 1e-6);
//Assert.AreEqual(11.177, distribution.Mean);
Assert.AreEqual(12, distribution.Median, 1e-5);
}
// Test with Effron method
{
var distribution = EmpiricalHazardDistribution.Estimate(times, censor);
double[] expectedCHF =
{
0.0000000, 0.1111111, 0.1111111, 0.1756496, 0.1756496, 0.2497576, 0.3298003,
0.3298003, 0.4251104, 0.4251104, 0.5428935, 0.6764249, 0.6764249, 0.8587464,
1.0818900, 1.0818900, 1.0818900, 1.7750372, 1.7750372
};
double[] actualCHF = times.Apply(distribution.CumulativeHazardFunction);
for (int i = 0; i < actualCHF.Length; i++)
Assert.AreEqual(expectedCHF[i], actualCHF[i], 1e-6);
//Assert.AreEqual(11.177, distribution.Mean);
Assert.AreEqual(12, distribution.Median, 1e-5);
}
}