Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
12 / 12 |
|
100.00% |
10 / 10 |
CRAP | |
100.00% |
1 / 1 |
GeometricDistribution | |
100.00% |
12 / 12 |
|
100.00% |
10 / 10 |
11 | |
100.00% |
1 / 1 |
getPmf | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getCdf | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getMode | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getMean | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getMedian | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getVariance | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getStandardDeviation | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getMgf | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 | |||
getSkewness | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getExKurtosis | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | /** |
3 | * Jingga |
4 | * |
5 | * PHP Version 8.1 |
6 | * |
7 | * @package phpOMS\Math\Stochastic\Distribution |
8 | * @copyright Dennis Eichhorn |
9 | * @license OMS License 2.0 |
10 | * @version 1.0.0 |
11 | * @link https://jingga.app |
12 | */ |
13 | declare(strict_types=1); |
14 | |
15 | namespace phpOMS\Math\Stochastic\Distribution; |
16 | |
17 | /** |
18 | * Geometric distribution. |
19 | * |
20 | * @package phpOMS\Math\Stochastic\Distribution |
21 | * @license OMS License 2.0 |
22 | * @link https://jingga.app |
23 | * @since 1.0.0 |
24 | */ |
25 | final class GeometricDistribution |
26 | { |
27 | /** |
28 | * Get probability mass function. |
29 | * |
30 | * @param float $p Value p |
31 | * @param int $k Value k |
32 | * |
33 | * @return float |
34 | * |
35 | * @since 1.0.0 |
36 | */ |
37 | public static function getPmf(float $p, int $k) : float |
38 | { |
39 | return \pow(1 - $p, $k - 1) * $p; |
40 | } |
41 | |
42 | /** |
43 | * Get cumulative distribution function. |
44 | * |
45 | * @param float $p Value p |
46 | * @param int $k Value k |
47 | * |
48 | * @return float |
49 | * |
50 | * @since 1.0.0 |
51 | */ |
52 | public static function getCdf(float $p, int $k) : float |
53 | { |
54 | return 1 - \pow(1 - $p, $k); |
55 | } |
56 | |
57 | /** |
58 | * Get mode. |
59 | * |
60 | * @return int |
61 | * |
62 | * @since 1.0.0 |
63 | */ |
64 | public static function getMode() : int |
65 | { |
66 | return 1; |
67 | } |
68 | |
69 | /** |
70 | * Get expected value. |
71 | * |
72 | * @param float $p Value p |
73 | * |
74 | * @return float |
75 | * |
76 | * @since 1.0.0 |
77 | */ |
78 | public static function getMean(float $p) : float |
79 | { |
80 | return 1 / $p; |
81 | } |
82 | |
83 | /** |
84 | * Get median. |
85 | * |
86 | * @param float $p Value p |
87 | * |
88 | * @return float |
89 | * |
90 | * @since 1.0.0 |
91 | */ |
92 | public static function getMedian(float $p) : float |
93 | { |
94 | return \ceil(-1 / (\log(1 - $p, 2))); |
95 | } |
96 | |
97 | /** |
98 | * Get variance. |
99 | * |
100 | * @param float $p Value p |
101 | * |
102 | * @return float |
103 | * |
104 | * @since 1.0.0 |
105 | */ |
106 | public static function getVariance(float $p) : float |
107 | { |
108 | return (1 - $p) / $p ** 2; |
109 | } |
110 | |
111 | /** |
112 | * Get standard deviation. |
113 | * |
114 | * @param float $p Value p |
115 | * |
116 | * @return float |
117 | * |
118 | * @since 1.0.0 |
119 | */ |
120 | public static function getStandardDeviation(float $p) : float |
121 | { |
122 | return \sqrt(self::getVariance($p)); |
123 | } |
124 | |
125 | /** |
126 | * Get moment generating function. |
127 | * |
128 | * @param float $p Value p |
129 | * @param float $t Value t |
130 | * |
131 | * @return float |
132 | * |
133 | * @since 1.0.0 |
134 | */ |
135 | public static function getMgf(float $p, float $t) : float |
136 | { |
137 | return $t < -\log(1 - $p) |
138 | ? $p * \exp($t) / (1 - (1 - $p) * \exp($t)) |
139 | : $p / (1 - (1 - $p) * \exp($t)); |
140 | } |
141 | |
142 | /** |
143 | * Get skewness. |
144 | * |
145 | * @param float $lambda Lambda |
146 | * |
147 | * @return float |
148 | * |
149 | * @since 1.0.0 |
150 | */ |
151 | public static function getSkewness(float $lambda) : float |
152 | { |
153 | return (2 - $lambda) / \sqrt(1 - $lambda); |
154 | } |
155 | |
156 | /** |
157 | * Get Ex. kurtosis. |
158 | * |
159 | * @param float $lambda Lambda |
160 | * |
161 | * @return float |
162 | * |
163 | * @since 1.0.0 |
164 | */ |
165 | public static function getExKurtosis(float $lambda) : float |
166 | { |
167 | return 6 + $lambda ** 2 / (1 - $lambda); |
168 | } |
169 | } |