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 scipykönnen Sie dies mit der ppfMethode des scipy.stats.normObjekts berechnen . Das Akronym ppfsteht 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.ppfVerwendet 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 locund scalejeweils 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 ppfMethode 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.8dem Start stellt die Standardbibliothek das NormalDistObjekt als Teil des statisticsModuls 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 = 0und sigma = 1) vereinfacht werden kann :
NormalDist().inv_cdf(0.95)
# 1.6448536269514715