public void DistributionFunctionTest2()
{
// Verified against http://stattrek.com/online-calculator/hypergeometric.aspx
int population = 20;
int populationSuccess = 8;
int sample = 6;
double[] pmf = { 0.0238390092879257, 0.163467492260062, 0.357585139318886, 0.317853457172343, 0.119195046439628, 0.0173374613003096, 0.000722394220846233 };
double[] less = { 0.0000000000000000, 0.023839009287926, 0.187306501547988, 0.544891640866874, 0.862745098039217, 0.981940144478844, 0.999277605779154 };
double[] lessEqual = { 0.0238390092879257, 0.187306501547988, 0.544891640866874, 0.862745098039217, 0.981940144478845, 0.999277605779154, 1 };
double[] greater = { 0.976160990712074, 0.812693498452012, 0.455108359133126, 0.137254901960783, 0.018059855521155, 0.000722394220845968, 0 };
double[] greaterEqual = { 1, 0.976160990712074, 0.812693498452012, 0.455108359133126, 0.137254901960783, 0.0180598555211555, 0.00072239422084619 };
var target = new HypergeometricDistribution(population, populationSuccess, sample);
for (int i = 0; i < pmf.Length; i++)
{
{ // P(X = i)
double actual = target.ProbabilityMassFunction(i);
Assert.AreEqual(pmf[i], actual, 1e-4);
Assert.IsFalse(Double.IsNaN(actual));
}
{ // P(X <= i)
double actual = target.DistributionFunction(i);
Assert.AreEqual(lessEqual[i], actual, 1e-4);
Assert.IsFalse(Double.IsNaN(actual));
}
{ // P(X < i)
double actual = target.DistributionFunction(i, inclusive: false);
Assert.AreEqual(less[i], actual, 1e-4);
Assert.IsFalse(Double.IsNaN(actual));
}
{ // P(X > i)
double actual = target.ComplementaryDistributionFunction(i);
Assert.AreEqual(greater[i], actual, 1e-4);
Assert.IsFalse(Double.IsNaN(actual));
}
{ // P(X >= i)
double actual = target.ComplementaryDistributionFunction(i, inclusive: true);
Assert.AreEqual(greaterEqual[i], actual, 1e-4);
Assert.IsFalse(Double.IsNaN(actual));
}
}
}