probabilidad numeros normal funciones estandar estadistica distribucion densidad con aleatorios acumulada python statistics scipy probability

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



numeros aleatorios con distribucion normal python (6)

¿Cómo se calcula la probabilidad en la distribución normal dada media, estándar en Python? Siempre puedo codificar explícitamente mi propia función de acuerdo con la definición como hizo el OP en esta pregunta: Calcular 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 te permita 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 dada una distribución normal en Perl? . Pero no vi uno en Python.

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


Aquí hay más información . En primer lugar, se trata de una distribución congelada (congelado en este caso significa que sus parámetros se establecen 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


Escribí este programa para hacer los cálculos por ti. Simplemente ingrese las estadísticas de resumen. No es necesario proporcionar una matriz:

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

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


Hay uno en scipy.stats :

>>> import scipy.stats >>> scipy.stats.norm(0, 1) <scipy.stats.distributions.rv_frozen object at 0x928352c> >>> 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.distributions.rv_frozen object at 0x928352c> >>> 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 a tener en cuenta, solo un consejo, es que el paso de parámetros es un poco amplio. Debido a la forma en que se configura el código, si accidentalmente escribe 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 descarte silenciosamente esos argumentos adicionales de palabra clave y le dará el valor predeterminado (0,1).]


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

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


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 pi = 3.1415926 denom = (2*pi*var)**.5 num = math.exp(-(float(x)-float(mean))**2/(2*var)) return num/denom

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

Probar:

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


Solo puede usar la función de error que está incorporada en la biblioteca matemática, como se indica en su website .