How to calculate probability in a normal distribution given mean & standard deviation? How to calculate probability in a normal distribution given mean & standard deviation? python python

How to calculate probability in a normal distribution given mean & standard deviation?


There's one in 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

[One thing to beware of -- just a tip -- is that the parameter passing is a little broad. Because of the way the code is set up, if you accidentally write scipy.stats.norm(mean=100, std=12) instead of scipy.stats.norm(100, 12) or scipy.stats.norm(loc=100, scale=12), then it'll accept it, but silently discard those extra keyword arguments and give you the default (0,1).]


Scipy.stats is a great module. Just to offer another approach, you can calculate it directly using

import mathdef 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

This uses the formula found here: http://en.wikipedia.org/wiki/Normal_distribution#Probability_density_function

to test:

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


Here is more info.First you are dealing with a frozen distribution (frozen in this case means its parameters are set to specific values). To create a frozen distribution:

import scipy.statsscipy.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 distributionscipy.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 Functionscipy.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 Functionscipy.stats.norm.ppf(.98,100,12)Output: 124.64498692758187