public void DocumentationExample_Aalen()
{
// Consider the following hazard rates, occurring at the given time steps
double[] times = { 0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 17, 20, 21 };
double[] hazards =
{
0, 0.111111111111111, 0.0625, 0.0714285714285714, 0.0769230769230769,
0, 0.0909090909090909, 0, 0.111111111111111, 0.125, 0,
0.166666666666667, 0.2, 0, 0.5, 0
};
// Create a new distribution given the observations and event times
var distribution = new EmpiricalHazardDistribution(times, hazards);
// Common measures
double mean = distribution.Mean; // 6.1658527179584119
double median = distribution.Median; // 11.999999704601453
double var = distribution.Variance; // 44.101147497430993
// Cumulative distribution functions
double cdf = distribution.DistributionFunction(x: 4); // 0.275274821017619
double ccdf = distribution.ComplementaryDistributionFunction(x: 4); // 0.724725178982381
double icdf = distribution.InverseDistributionFunction(p: cdf); // 4.4588994137113307
// Probability density functions
double pdf = distribution.ProbabilityDensityFunction(x: 4); // 0.055748090690952365
double lpdf = distribution.LogProbabilityDensityFunction(x: 4); // -2.8869121169242962
// Hazard (failure rate) functions
double hf = distribution.HazardFunction(x: 4); // 0.0769230769230769
double chf = distribution.CumulativeHazardFunction(x: 4); // 0.32196275946275932
string str = distribution.ToString(); // H(x; v, t)
try { double mode = distribution.Mode; Assert.Fail(); }
catch { }
Assert.AreEqual(SurvivalEstimator.FlemingHarrington, distribution.Estimator);
Assert.AreEqual(1, distribution.ComplementaryDistributionFunction(0));
Assert.AreEqual(0, distribution.ComplementaryDistributionFunction(Double.PositiveInfinity));
Assert.AreEqual(6.1658527179584119, mean);
Assert.AreEqual(11.999999704601453, median, 1e-6);
Assert.AreEqual(44.101147497430993, var);
Assert.AreEqual(0.32196275946275932, chf);
Assert.AreEqual(0.275274821017619, cdf);
Assert.AreEqual(0.055748090690952365, pdf);
Assert.AreEqual(-2.8869121169242962, lpdf);
Assert.AreEqual(0.0769230769230769, hf);
Assert.AreEqual(0.724725178982381, ccdf);
Assert.AreEqual(4.4588994137113307, icdf, 1e-8);
Assert.AreEqual("H(x; v, t)", str);
var range1 = distribution.GetRange(0.95);
var range2 = distribution.GetRange(0.99);
var range3 = distribution.GetRange(0.01);
Assert.AreEqual(1, range1.Min, 1e-3);
Assert.AreEqual(20.562, range1.Max, 1e-3);
Assert.AreEqual(1, range2.Min, 1e-3);
Assert.AreEqual(20.562, range2.Max, 1e-3);
Assert.AreEqual(1, range3.Min, 1e-3);
Assert.AreEqual(20.562, range3.Max, 1e-3);
for (int i = 0; i < hazards.Length; i++)
Assert.AreEqual(hazards[i], distribution.HazardFunction(times[i]));
}