package Ġorg . jetbrains . bio . statistics . distribution Ċ Ċ import Ġg nu . tro ve . list . array . T Int ArrayList Ċ import Ġjunit . framework . Assertion Failed Error Ċ import Ġjunit . framework . TestCase . assertEquals Ċ import Ġorg . jetbrains . bio . util . Retry Ċ import Ġorg . jetbrains . bio . util . Retry Rule Ċ import Ġorg . jetbrains . bio . vik tor . F 6 4 Array Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠNegative Bin omial Distribution Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġrule Ġ= ĠRetry Rule ( 3 ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠS ampling . RANDOM _ DATA _ GENER ATOR . re Seed ( 4 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Mean GreaterThan Variance () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Negative Bin omial Distribution . estimate Failures Using Moment s ( 1 . 0 , Ġ 0 . 5 ). isIn finite ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Mean Variance Z eros () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Negative Bin omial Distribution . estimate Failures Using Moment s ( 0 . 0 , Ġ 0 . 0 ). isIn finite ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Retry ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest MLE () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnum Failed Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġnum Runs Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġval Ġsample Size Ġ= Ġ 6 5 5 3 6 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( run Ġin Ġ 0 Ġuntil Ġnum Runs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Failures Ġ= ĠS ampling . sample Uniform ( 0 . 0 , Ġ 4 2 . 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Probability Ġ= ĠS ampling . sample Uniform ( 0 . 0 , Ġ 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnb Sampling Ġ= ĠNegative Bin omial Distribution . using Success Probability ( success Probability , Ġnum Failures . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobservations Ġ= ĠT Int ArrayList ( nb Sampling . sample ( sample Size )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġobservations . toArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnb Ġ= ĠNegative Bin omial Distribution . of ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( num Failures . toDouble (), Ġnb . failures , Ġ 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( success Probability , Ġnb . probability Of Success , Ġ 0 . 0 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠAssertion Failed Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Failed ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNote ( le be dev ): Ġwe 're Ġhappy Ġif Ġat Ġmost Ġ 1 / 5 Ġruns Ġfail . ĊĠĠĠĠĠĠĠ ĠassertTrue ( num Failed Ġ<= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Retry ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest MLE F 6 4 Array () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnum Failed Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġnum Runs Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġval Ġsample Size Ġ= Ġ 6 5 5 3 6 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( run Ġin Ġ 0 Ġuntil Ġnum Runs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Failures Ġ= ĠS ampling . sample Uniform ( 1 . 0 , Ġ 4 2 . 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Probability Ġ= ĠS ampling . sample Uniform ( 0 . 0 , Ġ 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnb Sampling Ġ= ĠNegative Bin omial Distribution . using Success Probability ( success Probability , Ġnum Failures . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsamples Ġ= ĠT Int ArrayList ( nb Sampling . sample ( sample Size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweights Ġ= ĠF 6 4 Array ( sample Size ) Ġ{ Ġ 1 . 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsamples Array Ġ= Ġsamples . toArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmean Ġ= Ġsamples Array . average () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfailures Guess Ġ= ĠS ampling . sample Uniform ( 1 . 0 , Ġ 4 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfailures Ġ= ĠNegative Bin omial Distribution . fit NumberOf Failures ( samples Array , Ġweights , Ġmean , Ġfailures Guess ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( num Failures . toDouble (), Ġfailures , Ġ 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( success Probability , Ġmean Ġ/ Ġ( mean Ġ+ Ġfailures ), Ġ 0 . 0 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠAssertion Failed Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Failed ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNote ( le be dev ): Ġwe 're Ġhappy Ġif Ġat Ġmost Ġ 1 / 5 Ġruns Ġfail . ĊĠĠĠĠĠĠĠ ĠassertTrue ( num Failed Ġ<= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Retry ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fit Gamma () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsample Size Ġ= Ġ 6 5 5 3 6 ĊĠĠĠĠĠĠĠ Ġval Ġnum Runs Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġvar Ġnum Failed Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 . until ( num Runs )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= ĠS ampling . sample Uniform ( 0 . 0 , Ġ 2 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrate Ġ= ĠS ampling . sample Uniform ( 0 . 0 , Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsamples Ġ= ĠDouble Array ( sample Size ) Ġ{ ĠS ampling . sample Gamma ( shape , Ġrate ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Samples Ġ= ĠDouble Array ( sample Size ) Ġ{ ĠMath . log ( samples [ it ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Guess Ġ= ĠS ampling . sample Uniform ( 0 . 0 , Ġ 2 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfit ted Shape Ġ= ĠNegative Bin omial Distribution . fit Gamma ( log Samples . average (), Ġsamples . average (), Ġshape Guess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( shape , Ġfit ted Shape , Ġ 0 . 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠAssertion Failed Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Failed ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( num Failed Ġ<= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAll Ġthe Ġvalues Ġgenerated Ġwith ĠR . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fixed Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfailures Ġ= Ġdouble ArrayOf ( 1 0 . 3 4 4 3 9 4 , Ġ 6 . 6 3 6 8 4 0 , Ġ 8 . 2 7 2 8 0 0 , Ġ 5 . 7 9 0 5 7 3 , Ġ 1 5 . 0 6 6 3 8 6 , Ġ 8 . 2 1 9 7 3 5 , Ġ 7 . 6 1 1 6 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 . 7 9 3 8 5 7 , Ġ 8 . 6 9 9 8 8 8 , Ġ 1 4 . 3 1 9 6 2 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Prob abilities Ġ= Ġdouble ArrayOf ( 0 . 6 0 4 0 0 2 5 3 , Ġ 0 . 6 5 1 2 0 1 7 0 , Ġ 0 . 0 3 3 5 7 0 3 9 , Ġ 0 . 2 0 6 5 4 8 2 3 , Ġ 0 . 6 0 3 4 8 2 6 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 4 4 3 7 0 0 9 , Ġ 0 . 5 7 4 6 5 3 4 9 , Ġ 0 . 6 0 5 9 5 1 1 1 , Ġ 0 . 3 9 1 9 6 6 4 6 , Ġ 0 . 2 9 6 5 5 9 1 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġmeans Ġ= Ġdouble ArrayOf ( 1 5 . 7 7 7 9 7 9 5 , Ġ 1 2 . 3 9 0 8 9 0 4 , Ġ 0 . 2 8 7 3 6 8 2 , Ġ 1 . 5 0 7 3 7 9 0 , Ġ 2 2 . 9 3 0 4 0 4 0 , Ġ 9 . 8 2 0 6 4 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 2 8 3 5 1 1 4 , Ġ 8 . 9 0 9 5 3 8 7 , Ġ 5 . 6 0 8 3 4 8 9 , Ġ 6 . 0 3 6 9 1 7 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġsample Ġ= Ġint ArrayOf ( 1 , Ġ 6 , Ġ 5 , Ġ 0 , Ġ 4 , Ġ 2 , Ġ 4 , Ġ 2 , Ġ 4 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġprobabilities Ġ= Ġdouble ArrayOf ( 4 . 3 0 6 4 1 3 e - 0 4 , Ġ 5 . 0 9 2 2 7 8 e - 0 2 , Ġ 2 . 9 2 0 4 1 5 e - 0 5 , Ġ 2 . 6 1 9 1 8 6 e - 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 . 6 5 3 0 1 1 e - 0 4 , Ġ 1 . 7 5 4 7 6 0 e - 0 2 , Ġ 4 . 5 3 6 0 8 7 e - 0 2 , Ġ 3 . 2 7 7 9 6 7 e - 0 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 3 7 0 3 1 2 e - 0 1 , Ġ 1 . 3 4 5 9 7 0 e - 0 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġlog Prob abilities Ġ= Ġdouble ArrayOf (- 7 . 7 5 0 2 3 5 , Ġ- 2 . 9 7 7 4 4 5 , Ġ- 1 0 . 4 4 1 2 0 0 , Ġ- 1 . 3 3 9 7 2 2 , Ġ- 7 . 9 1 4 7 8 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 4 . 0 4 2 8 3 8 , Ġ- 3 . 0 9 3 1 0 5 , Ġ- 3 . 4 1 7 9 4 7 , Ġ- 1 . 9 8 7 5 4 7 , Ġ- 2 . 0 0 5 4 7 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġeps Ġ= Ġ 1 E - 6 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Mean Ġ= ĠNegative Bin omial Distribution . using Mean ( means [ i ], Ġfailures [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Probability Ġ= ĠNegative Bin omial Distribution . using Success Probability ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Prob abilities [ i ], Ġfailures [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( from Mean . num erical Mean , Ġfrom Probability . num erical Mean , Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( from Mean . probability Of Success , Ġfrom Probability . probability Of Success , Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( from Mean . failures , Ġfrom Probability . failures , Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( prob abilities [ i ], Ġfrom Mean . probability ( sample [ i ]), Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( prob abilities [ i ], Ġfrom Probability . probability ( sample [ i ]), Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( log Prob abilities [ i ], Ġfrom Mean . log Probability ( sample [ i ]), Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( log Prob abilities [ i ], Ġfrom Probability . log Probability ( sample [ i ]), Ġeps ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( log Prob abilities [ i ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ens ities . log Negative Bin omial Density ( sample [ i ], Ġmeans [ i ], Ġfailures [ i ]), Ġeps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }