Wie berechne ich die Umkehrung der kumulativen Verteilungsfunktion (CDF) der Normalverteilung in Python?
Welche Bibliothek soll ich benutzen? Möglicherweise scipy?
Wie berechne ich die Umkehrung der kumulativen Verteilungsfunktion (CDF) der Normalverteilung in Python?
Welche Bibliothek soll ich benutzen? Möglicherweise scipy?
Antworten:
NORMSINV (in einem Kommentar erwähnt) ist die Umkehrung der CDF der Standardnormalverteilung. Mit scipy
können Sie dies mit der ppf
Methode des scipy.stats.norm
Objekts berechnen . Das Akronym ppf
steht für die Prozentpunktfunktion , die ein anderer Name für die Quantilfunktion ist .
In [20]: from scipy.stats import norm
In [21]: norm.ppf(0.95)
Out[21]: 1.6448536269514722
Überprüfen Sie, ob es sich um die Umkehrung der CDF handelt:
In [34]: norm.cdf(norm.ppf(0.95))
Out[34]: 0.94999999999999996
norm.ppf
Verwendet standardmäßig mean = 0 und stddev = 1, was die "Standard" -Normalverteilung ist. Sie können die durch die Angabe eine unterschiedliche Mittelwert und Standardabweichung verwenden loc
und scale
jeweils Argumente.
In [35]: norm.ppf(0.95, loc=10, scale=2)
Out[35]: 13.289707253902945
Wenn Sie sich den Quellcode ansehen scipy.stats.norm
, werden Sie feststellen, dass die ppf
Methode letztendlich aufruft scipy.special.ndtri
. Um die Umkehrung der CDF der Standardnormalverteilung zu berechnen, können Sie diese Funktion direkt verwenden:
In [43]: from scipy.special import ndtri
In [44]: ndtri(0.95)
Out[44]: 1.6448536269514722
# given random variable X (house price) with population muy = 60, sigma = 40
import scipy as sc
import scipy.stats as sct
sc.version.full_version # 0.15.1
#a. Find P(X<50)
sct.norm.cdf(x=50,loc=60,scale=40) # 0.4012936743170763
#b. Find P(X>=50)
sct.norm.sf(x=50,loc=60,scale=40) # 0.5987063256829237
#c. Find P(60<=X<=80)
sct.norm.cdf(x=80,loc=60,scale=40) - sct.norm.cdf(x=60,loc=60,scale=40)
#d. how much top most 5% expensive house cost at least? or find x where P(X>=x) = 0.05
sct.norm.isf(q=0.05,loc=60,scale=40)
#e. how much top most 5% cheapest house cost at least? or find x where P(X<=x) = 0.05
sct.norm.ppf(q=0.05,loc=60,scale=40)
Ab Python 3.8
dem Start stellt die Standardbibliothek das NormalDist
Objekt als Teil des statistics
Moduls bereit .
Es kann verwendet werden, um die inverse kumulative Verteilungsfunktion ( inv_cdf
- inverse von cdf
) zu erhalten, die auch als Quantilfunktion oder Prozentpunktfunktion für einen bestimmten Mittelwert ( mu
) und eine bestimmte Standardabweichung ( sigma
) bezeichnet wird:
from statistics import NormalDist
NormalDist(mu=10, sigma=2).inv_cdf(0.95)
# 13.289707253902943
Was für die Standardnormalverteilung ( mu = 0
und sigma = 1
) vereinfacht werden kann :
NormalDist().inv_cdf(0.95)
# 1.6448536269514715