2008-11-25 4 views
4

Disons que nous avons une distribution normale n (x): moyenne = 0 et \ int _ {- a}^{a} n (x) = P.standard C ou bibliothèques Python pour calculer l'écart-type de la distribution normale

Quel est le moyen le plus simple de calculer l'écart type d'une telle distribution? Peut-être existe-t-il des bibliothèques standard pour Python ou C, qui conviennent à cette tâche?

+0

L'écart-type d'une distribution normale avec une moyenne de 0 n'est-il pas toujours égal à 1,0? N'est-ce pas la définition? –

+0

Ce n'est vrai que d'une distribution normale standard, je pense. – babbageclunk

+0

P = \ int _ {- a}^{a} n (x) devrait être 1, sinon ce n'est pas une distribution de probabilité. La distribution standard (ou la variance) peut être n'importe quoi, cependant. – ShreevatsaR

Répondre

5

L'écart-type d'une distribution gaussienne de moyenne zéro avec Pr (-a < X < a) = P est

a/(sqrt(2)*inverseErf(P)) 

qui est l'expression vous êtes à la recherche, où inverseErf est l'inverse de la fonction d'erreur (communément appelée erf).

Pour C, la bibliothèque scientifique Gnu (GSL) est une bonne ressource. Cependant, il n'a que erf, pas inverseErf, donc vous devriez l'inverser vous-même (une simple recherche binaire ferait l'affaire). Sinon, voici une belle façon de se rapprocher erf et inverseErf:

http://homepages.physik.uni-muenchen.de/~Winitzki/erf-approx.pdf

Pour Python, inverseErf est disponible en erfinv dans la bibliothèque SciPy, donc ce qui suit donne l'écart-type:

a/(math.sqrt(2)*erfinv(P)) 

PS : Il y a une sorte de bug dans le rendu de l'URL de Stackoverflow et il ne me laisserait pas créer un lien vers GSL ci-dessus: http://www.gnu.org/software/gsl. Il rend aussi mal quand je fais l'URL ci-dessus avec un pdf un lien approprié.

1

Jetez un oeil à la sciPy Project, il devrait avoir ce dont vous avez besoin.

7

Si X est normale avec une moyenne 0 et sigma écart-type, il faut tenir

P = Prob[ -a <= X <= a ] = Prob[ -a/sigma <= N <= a/sigma ] 
    = 2 Prob[ 0 <= N <= a/sigma ] 
    = 2 (Prob[ N <= a/sigma ] - 1/2) 

où N est normale avec une moyenne 0 et écart-type 1. Par conséquent

P/2 + 1/2 = Prob[ N <= a/sigma ] = Phi(a/sigma) 

Où Phi est la fonction de distribution cumulative (cdf) d'une variable normale avec la moyenne 0 et stddev 1. Maintenant, nous avons besoin de inverse normal cdf (ou la "fonction de point de pourcentage"), qui en Python est scipy.stats.norm.ppf(). Exemple de code:

from scipy.stats import norm 
P = 0.3456 
a = 3.0 

a_sigma = float(norm.ppf(P/2 + 0.5)) # a/sigma 
sigma = a/a_sigma # Here is the standard deviation 

Par exemple, nous savons que la probabilité d'une variable N (0,1) tombant int l'intervalle [-1,1] est ~ 0,682 (la zone bleue foncée this figure). Si vous définissez P = 0,682 et a = 1,0, vous obtenez sigma ~ 1,0, ce qui correspond à l'écart-type.

Questions connexes