ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
Binomial.php
Go to the documentation of this file.
1<?php
2
4
8
10{
27 public static function distribution($value, $trials, $probability, $cumulative)
28 {
29 $value = Functions::flattenSingleValue($value);
30 $trials = Functions::flattenSingleValue($trials);
31 $probability = Functions::flattenSingleValue($probability);
32
33 try {
35 $trials = DistributionValidations::validateInt($trials);
36 $probability = DistributionValidations::validateProbability($probability);
37 $cumulative = DistributionValidations::validateBool($cumulative);
38 } catch (Exception $e) {
39 return $e->getMessage();
40 }
41
42 if (($value < 0) || ($value > $trials)) {
43 return Functions::NAN();
44 }
45
46 if ($cumulative) {
47 return self::calculateCumulativeBinomial($value, $trials, $probability);
48 }
49
50 return Combinations::withoutRepetition($trials, $value) * $probability ** $value
51 * (1 - $probability) ** ($trials - $value);
52 }
53
68 public static function range($trials, $probability, $successes, $limit = null)
69 {
70 $trials = Functions::flattenSingleValue($trials);
71 $probability = Functions::flattenSingleValue($probability);
72 $successes = Functions::flattenSingleValue($successes);
73 $limit = ($limit === null) ? $successes : Functions::flattenSingleValue($limit);
74
75 try {
76 $trials = DistributionValidations::validateInt($trials);
77 $probability = DistributionValidations::validateProbability($probability);
78 $successes = DistributionValidations::validateInt($successes);
80 } catch (Exception $e) {
81 return $e->getMessage();
82 }
83
84 if (($successes < 0) || ($successes > $trials)) {
85 return Functions::NAN();
86 }
87 if (($limit < 0) || ($limit > $trials) || $limit < $successes) {
88 return Functions::NAN();
89 }
90
91 $summer = 0;
92 for ($i = $successes; $i <= $limit; ++$i) {
93 $summer += Combinations::withoutRepetition($trials, $i) * $probability ** $i
94 * (1 - $probability) ** ($trials - $i);
95 }
96
97 return $summer;
98 }
99
118 public static function negative($failures, $successes, $probability)
119 {
120 $failures = Functions::flattenSingleValue($failures);
121 $successes = Functions::flattenSingleValue($successes);
122 $probability = Functions::flattenSingleValue($probability);
123
124 try {
125 $failures = DistributionValidations::validateInt($failures);
126 $successes = DistributionValidations::validateInt($successes);
127 $probability = DistributionValidations::validateProbability($probability);
128 } catch (Exception $e) {
129 return $e->getMessage();
130 }
131
132 if (($failures < 0) || ($successes < 1)) {
133 return Functions::NAN();
134 }
136 if (($failures + $successes - 1) <= 0) {
137 return Functions::NAN();
138 }
139 }
140
141 return (Combinations::withoutRepetition($failures + $successes - 1, $successes - 1))
142 * ($probability ** $successes) * ((1 - $probability) ** $failures);
143 }
144
157 public static function inverse($trials, $probability, $alpha)
158 {
159 $trials = Functions::flattenSingleValue($trials);
160 $probability = Functions::flattenSingleValue($probability);
161 $alpha = Functions::flattenSingleValue($alpha);
162
163 try {
164 $trials = DistributionValidations::validateInt($trials);
165 $probability = DistributionValidations::validateProbability($probability);
167 } catch (Exception $e) {
168 return $e->getMessage();
169 }
170
171 if ($trials < 0) {
172 return Functions::NAN();
173 } elseif (($alpha < 0.0) || ($alpha > 1.0)) {
174 return Functions::NAN();
175 }
176
177 $successes = 0;
178 while ($successes <= $trials) {
179 $result = self::calculateCumulativeBinomial($successes, $trials, $probability);
180 if ($result >= $alpha) {
181 break;
182 }
183 ++$successes;
184 }
185
186 return $successes;
187 }
188
192 private static function calculateCumulativeBinomial(int $value, int $trials, float $probability)
193 {
194 $summer = 0;
195 for ($i = 0; $i <= $value; ++$i) {
196 $summer += Combinations::withoutRepetition($trials, $i) * $probability ** $i
197 * (1 - $probability) ** ($trials - $i);
198 }
199
200 return $summer;
201 }
202}
$result
An exception for terminatinating execution or to throw for unit testing.
static flattenSingleValue($value='')
Convert an array to a single scalar value by extracting the first element.
Definition: Functions.php:649
static getCompatibilityMode()
Return the current Compatibility Mode.
Definition: Functions.php:93
static withoutRepetition($numObjs, $numInSet)
COMBIN.
static negative($failures, $successes, $probability)
NEGBINOMDIST.
Definition: Binomial.php:118
static calculateCumulativeBinomial(int $value, int $trials, float $probability)
Definition: Binomial.php:192
static distribution($value, $trials, $probability, $cumulative)
BINOMDIST.
Definition: Binomial.php:27
static range($trials, $probability, $successes, $limit=null)
BINOM.DIST.RANGE.
Definition: Binomial.php:68
static inverse($trials, $probability, $alpha)
CRITBINOM.
Definition: Binomial.php:157
$i
Definition: disco.tpl.php:19