Calcule la probabilidad en la distribución normal dada la media, estándar en Python

¿Cómo calcular la probabilidad en la distribución normal dada la media, estándar en Python? Siempre puedo explícitamente codificar mi propia función de acuerdo con la definición que hizo el OP en esta pregunta: Cálculo de la probabilidad de una variable aleatoria en una distribución en Python

Solo me pregunto si hay una llamada a la función de biblioteca que le permitirá hacer esto. En mi imaginación me gustaría esto:

nd = NormalDistribution(mu=100, std=12) p = nd.prob(98) 

Hay una pregunta similar en Perl: ¿Cómo puedo calcular la probabilidad en un punto dado una distribución normal en Perl? . Pero no vi uno en Python.

Numpy tiene una función random.normal pero es como muestrear, no exactamente lo que quiero.

Related of "Calcule la probabilidad en la distribución normal dada la media, estándar en Python"

Hay uno en scipy.stats :

 >>> import scipy.stats >>> scipy.stats.norm(0, 1)  >>> scipy.stats.norm(0, 1).pdf(0) 0.3989422804014327 >>> scipy.stats.norm(0, 1).cdf(0) 0.5 >>> scipy.stats.norm(100, 12)  >>> scipy.stats.norm(100, 12).pdf(98) 0.032786643008494994 >>> scipy.stats.norm(100, 12).cdf(98) 0.43381616738909634 >>> scipy.stats.norm(100, 12).cdf(100) 0.5 

[Una cosa de la que hay que tener cuidado, solo una sugerencia, es que el paso de parámetros es un poco amplio. Debido a la forma en que se configura el código, si escribe accidentalmente scipy.stats.norm(mean=100, std=12) lugar de scipy.stats.norm(100, 12) o scipy.stats.norm(loc=100, scale=12) , luego lo aceptará, pero descartará silenciosamente esos argumentos de palabras clave adicionales y le dará el valor predeterminado (0,1).]

Scipy.stats es un gran módulo. Solo para ofrecer otro enfoque, puedes calcularlo directamente usando

 import math def normpdf(x, mean, sd): var = float(sd)**2 denom = (2*math.pi*var)**.5 num = math.exp(-(float(x)-float(mean))**2/(2*var)) return num/denom 

Esto utiliza la fórmula que se encuentra aquí: http://en.wikipedia.org/wiki/Normal_distribution#Probability_density_function

Probar:

 >>> normpdf(7,5,5) 0.07365402806066466 >>> norm(5,5).pdf(7) 0.073654028060664664 

Aquí hay más información . Primero, se trata de una distribución congelada (congelada en este caso significa que sus parámetros se configuran en valores específicos). Para crear una distribución congelada:

 import scipy.stats scipy.stats.norm(loc=100, scale=12) #where loc is the mean and scale is the std dev #if you wish to pull out a random number from your distribution scipy.stats.norm.rvs(loc=100, scale=12) #To find the probability that the variable has a value LESS than or equal #let's say 113, you'd use CDF cumulative Density Function scipy.stats.norm.cdf(113,100,12) Output: 0.86066975255037792 #or 86.07% probability #To find the probability that the variable has a value GREATER than or #equal to let's say 125, you'd use SF Survival Function scipy.stats.norm.sf(125,100,12) Output: 0.018610425189886332 #or 1.86% #To find the variate for which the probability is given, let's say the #value which needed to provide a 98% probability, you'd use the #PPF Percent Point Function scipy.stats.norm.ppf(.98,100,12) Output: 124.64498692758187 

La fórmula citada de wikipedia mencionada en las respuestas no se puede usar para calcular las probabilidades normales. Tendría que escribir una función de aproximación de integración numérica utilizando esa fórmula para calcular la probabilidad.

Esa fórmula calcula el valor para la función de densidad de probabilidad. Dado que la distribución normal es continua, debe calcular una integral para obtener probabilidades. El sitio de wikipedia menciona el CDF, que no tiene una forma cerrada para la distribución normal.

Escribí este progtwig para hacer las matemáticas por ti. Simplemente ingrese en el resumen de estadísticas. No es necesario proporcionar una matriz:

Prueba Z de una muestra para una proporción de población:

Para hacer esto por media en lugar de proporción, cambie la fórmula para z en consecuencia

Al iniciar Python 3.8 , la biblioteca estándar proporciona el objeto NormalDist como parte del módulo de statistics .

Puede usarse para obtener la función de densidad de probabilidad ( pdf – probabilidad de que una muestra aleatoria X esté cerca del valor dado x) para una media dada ( mu ) y una desviación estándar ( sigma ):

 from statistics import NormalDist NormalDist(mu=100, sigma=12).pdf(98) # 0.032786643008494994 

También tenga en cuenta que el objeto NormalDist también proporciona la función de distribución acumulativa ( cdf : probabilidad de que una muestra aleatoria X sea menor o igual que x):

 NormalDist(mu=100, sigma=12).cdf(98) # 0.43381616738909634 

Simplemente puede usar la función de error que está integrada en la biblioteca matemática, como se indica en su sitio web .