Saltar al contenido

¿Cómo calcular la inversa de la función de distribución acumulativa normal en Python?

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *