Solución:
NORMSINV (mencionado en un comentario) es el inverso del CDF de la distribución normal estándar. Utilizando scipy
, puede calcular esto con el ppf
método del scipy.stats.norm
objeto. El acrónimo ppf
representa función de punto porcentual, que es otro nombre para el función cuantil.
In [20]: from scipy.stats import norm
In [21]: norm.ppf(0.95)
Out[21]: 1.6448536269514722
Comprueba que sea la inversa de la CDF:
In [34]: norm.cdf(norm.ppf(0.95))
Out[34]: 0.94999999999999996
Por defecto, norm.ppf
usa mean = 0 y stddev = 1, que es la distribución normal “estándar”. Puede utilizar una media y una desviación estándar diferentes especificando la loc
y scale
argumentos, respectivamente.
In [35]: norm.ppf(0.95, loc=10, scale=2)
Out[35]: 13.289707253902945
Si miras el código fuente de scipy.stats.norm
, encontrarás que el ppf
el método finalmente llama scipy.special.ndtri
. Entonces, para calcular la inversa de la CDF de la distribución normal estándar, puede usar esa función directamente:
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)
A partir de Python 3.8
, la biblioteca estándar proporciona NormalDist
objeto como parte del statistics
módulo.
Puede usarse para obtener el función de distribución acumulativa inversa (inv_cdf
– inversa de la cdf
), también conocido como el función cuantil o la función de punto porcentual para una dada significar (mu
) y Desviación Estándar (sigma
):
from statistics import NormalDist
NormalDist(mu=10, sigma=2).inv_cdf(0.95)
# 13.289707253902943
Que se puede simplificar para el distribución normal estándar (mu = 0
y sigma = 1
):
NormalDist().inv_cdf(0.95)
# 1.6448536269514715