Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
10 / 10
CRAP
100.00% covered (success)
100.00%
1 / 1
GeometricDistribution
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
10 / 10
11
100.00% covered (success)
100.00%
1 / 1
 getPmf
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getCdf
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getMode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getMean
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getMedian
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getVariance
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getStandardDeviation
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getMgf
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 getSkewness
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getExKurtosis
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
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 */
13declare(strict_types=1);
14
15namespace 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 */
25final 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}