Skip to content

Commit

Permalink
New Binomial unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
mbaudin47 committed Dec 3, 2024
1 parent 75ca8cf commit 287a849
Show file tree
Hide file tree
Showing 3 changed files with 239 additions and 1 deletion.
185 changes: 185 additions & 0 deletions python/test/t_Binomial_std.expout
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,191 @@ covariance= class=CovarianceMatrix dimension=1 implementation=class=MatrixImplem
parameters= [class=PointWithDescription name=X0 dimension=2 description=[n,p] values=[15,0.7]]
Standard representative= Binomial(n = 15, p = 0.7)
95.00% bilateral confidence interval = [7, 13]
Check on dataset
row = 0/37, x = 0, n = 10, pr = 0.0, P(X = x) = 1.0, CDF = 1.0, Compl. CDF = 0.0
computePDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeComplementaryCDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
row = 1/37, x = 10, n = 10, pr = 0.0, P(X = x) = 0.0, CDF = 1.0, Compl. CDF = 0.0
computePDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeComplementaryCDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeQuantile (B). Computed X = 10, expected = 10
row = 2/37, x = 0, n = 10, pr = 1.0, P(X = x) = 0.0, CDF = 0.0, Compl. CDF = 1.0
computePDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeCDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 0, F(X - 1) = 0.0000000e+00, F(X) = 0.0000000e+00
row = 3/37, x = 10, n = 10, pr = 1.0, P(X = x) = 1.0, CDF = 1.0, Compl. CDF = 0.0
computePDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeComplementaryCDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeQuantile (B). Computed X = 10, expected = 10
row = 4/37, x = 1, n = 1030, pr = 0.5, P(X = x) = 8.952445602587756e-308, CDF = 8.96113729734744e-308, Compl. CDF = 1.0
computePDF. Computed = 8.95244560259e-308, expected = 8.95244560259e-308
computeCDF. Computed = 8.96113729735e-308, expected = 8.96113729735e-308
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 1, F(X - 1) = 8.6916948e-311, F(X) = 8.9611373e-308
row = 5/37, x = 400, n = 1030, pr = 0.5, P(X = x) = 1.4435068396634365e-13, CDF = 3.897352466243578e-13, Compl. CDF = 0.9999999999996103
computePDF. Computed = 1.44350683966e-13, expected = 1.44350683966e-13
computeCDF. Computed = 3.89735246624e-13, expected = 3.89735246624e-13
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 400, F(X - 1) = 2.4538456e-13, F(X) = 3.8973525e-13
row = 6/37, x = 589, n = 1030, pr = 0.5, P(X = x) = 5.835293291163824e-07, CDF = 0.9999983439256698, Compl. CDF = 1.6560743301714625e-06
computePDF. Computed = 5.83529329116e-07, expected = 5.83529329116e-07
computeCDF. Computed = 9.99998343926e-01, expected = 9.99998343926e-01
computeComplementaryCDF. Computed = 1.65607433017e-06, expected = 1.65607433017e-06
computeQuantile (B). Computed X = 589, expected = 589
row = 7/37, x = 1, n = 30, pr = 0.1, P(X = x) = 0.14130386091738736, CDF = 0.18369501919260356, Compl. CDF = 0.8163049808073964
computePDF. Computed = 1.41303860917e-01, expected = 1.41303860917e-01
computeCDF. Computed = 1.83695019193e-01, expected = 1.83695019193e-01
computeComplementaryCDF. Computed = 8.16304980807e-01, expected = 8.16304980807e-01
computeQuantile (A). Computed X = 1, F(X - 1) = 4.2391158e-02, F(X) = 1.8369502e-01
row = 8/37, x = 1, n = 50, pr = 0.001, P(X = x) = 0.047607889299150725, CDF = 0.9988135174961821, Compl. CDF = 0.001186482503817932
computePDF. Computed = 4.76078892992e-02, expected = 4.76078892992e-02
computeCDF. Computed = 9.98813517496e-01, expected = 9.98813517496e-01
computeComplementaryCDF. Computed = 1.18648250382e-03, expected = 1.18648250382e-03
computeQuantile (B). Computed X = 1, expected = 1
row = 9/37, x = 16, n = 30, pr = 0.999, P(X = x) = 1.4311328174833965e-34, CDF = 1.4326623224074817e-34, Compl. CDF = 1.0
computePDF. Computed = 1.43113281748e-34, expected = 1.43113281748e-34
computeCDF. Computed = 1.43266232241e-34, expected = 1.43266232241e-34
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 16, F(X - 1) = 1.5295049e-37, F(X) = 1.4326623e-34
row = 10/37, x = 1, n = 240, pr = 0.9999, P(X = x) = 0.0, CDF = 0.0, Compl. CDF = 1.0
computePDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeCDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 0, F(X - 1) = 0.0000000e+00, F(X) = 0.0000000e+00
row = 11/37, x = 28, n = 100, pr = 0.22, P(X = x) = 0.032924061808075285, CDF = 0.9383900809697512, Compl. CDF = 0.06160991903024881
computePDF. Computed = 3.29240618081e-02, expected = 3.29240618081e-02
computeCDF. Computed = 9.38390080970e-01, expected = 9.38390080970e-01
computeComplementaryCDF. Computed = 6.16099190302e-02, expected = 6.16099190302e-02
computeQuantile (B). Computed X = 28, expected = 28
row = 12/37, x = 152, n = 1000, pr = 0.71, P(X = x) = 1.3502335695551398e-295, CDF = 1.4566914903506442e-295, Compl. CDF = 1.0
computePDF. Computed = 1.35023356956e-295, expected = 1.35023356956e-295
computeCDF. Computed = 1.45669149035e-295, expected = 1.45669149035e-295
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 152, F(X - 1) = 1.0645792e-296, F(X) = 1.4566915e-295
row = 13/37, x = 3, n = 1080, pr = 0.001, P(X = x) = 0.07127603460581645, CDF = 0.9757780300552841, Compl. CDF = 0.024221969944715913
computePDF. Computed = 7.12760346058e-02, expected = 7.12760346058e-02
computeCDF. Computed = 9.75778030055e-01, expected = 9.75778030055e-01
computeComplementaryCDF. Computed = 2.42219699447e-02, expected = 2.42219699447e-02
computeQuantile (B). Computed X = 3, expected = 3
row = 14/37, x = 0, n = 1030, pr = 0.5, P(X = x) = 8.691694759794e-311, CDF = 8.691694759794e-311, Compl. CDF = 1.0
computePDF. Computed = 8.69169475979e-311, expected = 8.69169475979e-311
computeCDF. Computed = 8.69169475979e-311, expected = 8.69169475979e-311
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 0, F(X - 1) = 0.0000000e+00, F(X) = 8.6916948e-311
row = 15/37, x = 1030, n = 1030, pr = 0.5, P(X = x) = 8.691694759794e-311, CDF = 1.0, Compl. CDF = 0.0
computePDF. Computed = 8.69169475979e-311, expected = 8.69169475979e-311
computeCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeComplementaryCDF. Computed = 0.00000000000e+00, expected = 0.00000000000e+00
computeQuantile (B). Computed X = 1030, expected = 1030
row = 16/37, x = 187, n = 1030, pr = 0.5, P(X = x) = 2.305222442510606e-100, CDF = 2.9597951362079584e-100, Compl. CDF = 1.0
computePDF. Computed = 2.30522244251e-100, expected = 2.30522244251e-100
computeCDF. Computed = 2.95979513621e-100, expected = 2.95979513621e-100
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 187, F(X - 1) = 6.5457269e-101, F(X) = 2.9597951e-100
row = 17/37, x = 4, n = 1030, pr = 0.5, P(X = x) = 4.052372710930284e-300, CDF = 4.0682022015213084e-300, Compl. CDF = 1.0
computePDF. Computed = 4.05237271093e-300, expected = 4.05237271093e-300
computeCDF. Computed = 4.06820220152e-300, expected = 4.06820220152e-300
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 4, F(X - 1) = 1.5829491e-302, F(X) = 4.0682022e-300
row = 18/37, x = 71, n = 1030, pr = 0.5, P(X = x) = 7.052396863408603e-200, CDF = 7.614904751686653e-200, Compl. CDF = 1.0
computePDF. Computed = 7.05239686341e-200, expected = 7.05239686341e-200
computeCDF. Computed = 7.61490475169e-200, expected = 7.61490475169e-200
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 71, F(X - 1) = 5.6250789e-201, F(X) = 7.6149048e-200
row = 19/37, x = 280, n = 1030, pr = 0.5, P(X = x) = 1.280342764528666e-50, CDF = 2.037991584857348e-50, Compl. CDF = 1.0
computePDF. Computed = 1.28034276453e-50, expected = 1.28034276453e-50
computeCDF. Computed = 2.03799158486e-50, expected = 2.03799158486e-50
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 280, F(X - 1) = 7.5764882e-51, F(X) = 2.0379916e-50
row = 20/37, x = 367, n = 1030, pr = 0.5, P(X = x) = 4.78246519228016e-21, CDF = 1.0625330196420556e-20, Compl. CDF = 1.0
computePDF. Computed = 4.78246519228e-21, expected = 4.78246519228e-21
computeCDF. Computed = 1.06253301964e-20, expected = 1.06253301964e-20
computeComplementaryCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeQuantile (A). Computed X = 367, F(X - 1) = 5.8428650e-21, F(X) = 1.0625330e-20
row = 21/37, x = 413, n = 1030, pr = 0.5, P(X = x) = 3.7344641140712264e-11, CDF = 1.1085627607135255e-10, Compl. CDF = 0.9999999998891437
computePDF. Computed = 3.73446411407e-11, expected = 3.73446411407e-11
computeCDF. Computed = 1.10856276071e-10, expected = 1.10856276071e-10
computeComplementaryCDF. Computed = 9.99999999889e-01, expected = 9.99999999889e-01
computeQuantile (A). Computed X = 413, F(X - 1) = 7.3511635e-11, F(X) = 1.1085628e-10
row = 22/37, x = 447, n = 1030, pr = 0.5, P(X = x) = 3.079274333642467e-06, CDF = 1.2646931839564025e-05, Compl. CDF = 0.9999873530681604
computePDF. Computed = 3.07927433364e-06, expected = 3.07927433364e-06
computeCDF. Computed = 1.26469318396e-05, expected = 1.26469318396e-05
computeComplementaryCDF. Computed = 9.99987353068e-01, expected = 9.99987353068e-01
computeQuantile (A). Computed X = 447, F(X - 1) = 9.5676575e-06, F(X) = 1.2646932e-05
row = 23/37, x = 478, n = 1030, pr = 0.5, P(X = x) = 0.0017421256529667251, CDF = 0.011442014956264542, Compl. CDF = 0.9885579850437355
computePDF. Computed = 1.74212565297e-03, expected = 1.74212565297e-03
computeCDF. Computed = 1.14420149563e-02, expected = 1.14420149563e-02
computeComplementaryCDF. Computed = 9.88557985044e-01, expected = 9.88557985044e-01
computeQuantile (A). Computed X = 478, F(X - 1) = 9.6998893e-03, F(X) = 1.1442015e-02
row = 24/37, x = 494, n = 1030, pr = 0.5, P(X = x) = 0.01056289669305525, CDF = 0.10069913185943613, Compl. CDF = 0.8993008681405639
computePDF. Computed = 1.05628966931e-02, expected = 1.05628966931e-02
computeCDF. Computed = 1.00699131859e-01, expected = 1.00699131859e-01
computeComplementaryCDF. Computed = 8.99300868141e-01, expected = 8.99300868141e-01
computeQuantile (A). Computed X = 494, F(X - 1) = 9.0136235e-02, F(X) = 1.0069913e-01
row = 25/37, x = 501, n = 1030, pr = 0.5, P(X = x) = 0.016993045111617772, CDF = 0.20009865401157712, Compl. CDF = 0.7999013459884229
computePDF. Computed = 1.69930451116e-02, expected = 1.69930451116e-02
computeCDF. Computed = 2.00098654012e-01, expected = 2.00098654012e-01
computeComplementaryCDF. Computed = 7.99901345988e-01, expected = 7.99901345988e-01
computeQuantile (A). Computed X = 501, F(X - 1) = 1.8310561e-01, F(X) = 2.0009865e-01
row = 26/37, x = 515, n = 1030, pr = 0.5, P(X = x) = 0.02485512993657447, CDF = 0.5124275649682872, Compl. CDF = 0.48757243503171277
computePDF. Computed = 2.48551299366e-02, expected = 2.48551299366e-02
computeCDF. Computed = 5.12427564968e-01, expected = 5.12427564968e-01
computeComplementaryCDF. Computed = 4.87572435032e-01, expected = 4.87572435032e-01
computeQuantile (B). Computed X = 515, expected = 515
row = 27/37, x = 519, n = 1030, pr = 0.5, P(X = x) = 0.024095522581366862, CDF = 0.6104180157142418, Compl. CDF = 0.38958198428575824
computePDF. Computed = 2.40955225814e-02, expected = 2.40955225814e-02
computeCDF. Computed = 6.10418015714e-01, expected = 6.10418015714e-01
computeComplementaryCDF. Computed = 3.89581984286e-01, expected = 3.89581984286e-01
computeQuantile (B). Computed X = 519, expected = 519
row = 28/37, x = 529, n = 1030, pr = 0.5, P(X = x) = 0.016993045111617772, CDF = 0.8168943911000407, Compl. CDF = 0.1831056088999593
computePDF. Computed = 1.69930451116e-02, expected = 1.69930451116e-02
computeCDF. Computed = 8.16894391100e-01, expected = 8.16894391100e-01
computeComplementaryCDF. Computed = 1.83105608900e-01, expected = 1.83105608900e-01
computeQuantile (B). Computed X = 529, expected = 529
row = 29/37, x = 536, n = 1030, pr = 0.5, P(X = x) = 0.01056289669305525, CDF = 0.9098637648336196, Compl. CDF = 0.09013623516638039
computePDF. Computed = 1.05628966931e-02, expected = 1.05628966931e-02
computeCDF. Computed = 9.09863764834e-01, expected = 9.09863764834e-01
computeComplementaryCDF. Computed = 9.01362351664e-02, expected = 9.01362351664e-02
computeQuantile (B). Computed X = 536, expected = 536
row = 30/37, x = 552, n = 1030, pr = 0.5, P(X = x) = 0.0017421256529667269, CDF = 0.9903001106967022, Compl. CDF = 0.009699889303297828
computePDF. Computed = 1.74212565297e-03, expected = 1.74212565297e-03
computeCDF. Computed = 9.90300110697e-01, expected = 9.90300110697e-01
computeComplementaryCDF. Computed = 9.69988930330e-03, expected = 9.69988930330e-03
computeQuantile (B). Computed X = 552, expected = 552
row = 31/37, x = 565, n = 1030, pr = 0.5, P(X = x) = 0.00019316170481490288, CDF = 0.9991817412924979, Compl. CDF = 0.0008182587075020682
computePDF. Computed = 1.93161704815e-04, expected = 1.93161704815e-04
computeCDF. Computed = 9.99181741292e-01, expected = 9.99181741292e-01
computeComplementaryCDF. Computed = 8.18258707502e-04, expected = 8.18258707502e-04
computeQuantile (B). Computed X = 565, expected = 565
row = 32/37, x = 575, n = 1030, pr = 0.5, P(X = x) = 2.2679394170815888e-05, CDF = 0.99991976208378, Compl. CDF = 8.02379162200689e-05
computePDF. Computed = 2.26793941708e-05, expected = 2.26793941708e-05
computeCDF. Computed = 9.99919762084e-01, expected = 9.99919762084e-01
computeComplementaryCDF. Computed = 8.02379162201e-05, expected = 8.02379162201e-05
computeQuantile (B). Computed X = 575, expected = 575
row = 33/37, x = 583, n = 1030, pr = 0.5, P(X = x) = 3.079274333642467e-06, CDF = 0.9999904323424941, Compl. CDF = 9.567657505921526e-06
computePDF. Computed = 3.07927433364e-06, expected = 3.07927433364e-06
computeCDF. Computed = 9.99990432342e-01, expected = 9.99990432342e-01
computeComplementaryCDF. Computed = 9.56765750592e-06, expected = 9.56765750592e-06
computeQuantile (B). Computed X = 583, expected = 583
row = 34/37, x = 598, n = 1030, pr = 0.5, P(X = x) = 3.6837174964506594e-08, CDF = 0.9999999078985209, Compl. CDF = 9.210147907487249e-08
computePDF. Computed = 3.68371749645e-08, expected = 3.68371749645e-08
computeCDF. Computed = 9.99999907899e-01, expected = 9.99999907899e-01
computeComplementaryCDF. Computed = 9.21014790749e-08, expected = 9.21014790749e-08
computeQuantile (B). Computed X = 598, expected = 598
row = 35/37, x = 617, n = 1030, pr = 0.5, P(X = x) = 3.7344641140712264e-11, CDF = 0.9999999999264884, Compl. CDF = 7.351163493063993e-11
computePDF. Computed = 3.73446411407e-11, expected = 3.73446411407e-11
computeCDF. Computed = 9.99999999926e-01, expected = 9.99999999926e-01
computeComplementaryCDF. Computed = 7.35116349306e-11, expected = 7.35116349306e-11
computeQuantile (B). Computed X = 617, expected = 617
row = 36/37, x = 635, n = 1030, pr = 0.5, P(X = x) = 1.4184282330185442e-14, CDF = 0.9999999999999771, Compl. CDF = 2.2855665875415883e-14
computePDF. Computed = 1.41842823302e-14, expected = 1.41842823302e-14
computeCDF. Computed = 1.00000000000e+00, expected = 1.00000000000e+00
computeComplementaryCDF. Computed = 2.28556658754e-14, expected = 2.28556658754e-14
computeQuantile (B). Computed X = 635, expected = 635
n=59 k=1 p(k-1)=0.0485 p(k)=0.1991 ok=True
n=60 k=1 p(k-1)=0.0461 p(k)=0.1916 ok=True
n=61 k=1 p(k-1)=0.0438 p(k)=0.1843 ok=True
Expand Down
53 changes: 53 additions & 0 deletions python/test/t_Binomial_std.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
#! /usr/bin/env python

# %%
import openturns as ot
import openturns.testing as ott
import os

# %%
ot.TESTPREAMBLE()

# Instantiate one distribution object
Expand Down Expand Up @@ -54,6 +57,7 @@
bounds = distribution.computeBilateralConfidenceInterval(1 - alpha)
print("%.2f%% bilateral confidence interval" % ((1 - alpha) * 100), " =", bounds)

# %%
# check survival at upper bound
distribution = ot.Binomial(10, 1.0)
assert distribution.computeCDF(10.0) == 1.0
Expand All @@ -64,6 +68,55 @@
distribution = ot.Binomial(3, 0.5)
assert distribution.computeScalarQuantile(0.9, True) == 0

# %%
print("Check on dataset")
separator = ","
skipped_lines = 13
path = os.path.join(os.path.dirname(__file__), "t_binomial_dataset.csv")
sample = ot.Sample.ImportFromTextFile(path, separator, skipped_lines)
rtol = 1.e-12
atol = 1.e-300
sample_size = sample.getSize()
for i in range(sample_size):
x, n, pr, expected_pdf, expected_cdfp, expected_cdfq = sample[i]
x = int(x)
n = int(n)
distribution = ot.Binomial(n, pr)
computed_p = distribution.computePDF(x)
computed_cdf = distribution.computeCDF(x)
computed_ccdf = distribution.computeComplementaryCDF(x)
print(f"row = {i}/{sample_size}, x = {x}, n = {n}, pr = {pr}, "
f"P(X = x) = {expected_pdf}, CDF = {expected_cdfp}, Compl. CDF = {expected_cdfq}")
# Check PDF
print(f" computePDF. Computed = {computed_p:.11e}, expected = {expected_pdf:.11e}")
ott.assert_almost_equal(computed_p, expected_pdf, rtol, atol)
# Check CDF
print(f" computeCDF. Computed = {computed_cdf:.11e}, expected = {expected_cdfp:.11e}")
ott.assert_almost_equal(computed_cdf, expected_cdfp, rtol, atol)
# Check complementary CDF
print(f" computeComplementaryCDF. Computed = {computed_ccdf:.11e}, expected = {expected_cdfq:.11e}")
ott.assert_almost_equal(computed_ccdf, expected_cdfq, rtol, atol)
# Check quantile
if pr == 0.0 and x < n:
# The function is not invertible
# for this particular input.
continue
elif expected_cdfp < expected_cdfq:
computed_x = int(distribution.computeQuantile(computed_cdf)[0])
cdfXM1 = distribution.computeCDF(computed_x - 1)
cdfX = distribution.computeCDF(computed_x)
print(f" computeQuantile (A). Computed X = {computed_x}, F(X - 1) = {cdfXM1:.7e}, F(X) = {cdfX:.7e}")
if computed_cdf == 0.0:
assert computed_x == 0.0
else:
assert cdfXM1 < computed_cdf and computed_cdf <= cdfX
else:
computed_x = int(distribution.computeQuantile(computed_ccdf, True)[0])
print(f" computeQuantile (B). Computed X = {computed_x}, expected = {x}")
assert x == computed_x


# %%
# quantile bug
alpha = 0.05
beta = 0.05
Expand Down
2 changes: 1 addition & 1 deletion python/test/t_binomial_dataset.csv
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#
# Assessing the quality of the Binomial distribution function
# Table of inputs computed using R software
x,N,pr,PDF-P,CDF-P,CDF-Q
"x","N","pr","PDF-P","CDF-P","CDF-Q"
0,10,0,1,1,0
10,10,0,0,1,0
0,10,1,0,0,1
Expand Down

0 comments on commit 287a849

Please sign in to comment.