Question

Disons que nous avons la distribution normale n (x): moyenne = 0 et \ int _ {- a} ^ {a} n (x) = P.

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?

Était-ce utile?

La solution

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

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

qui est l'expression que vous recherchez, où inverseErf est l'inverse de la fonction d'erreur (communément appelé erf).

Pour C, la bibliothèque scientifique Gnu (GSL) est une bonne ressource. Cependant, il n’a que erf, pas inverseErf, il faut donc l’inverser vous-même (une simple recherche binaire ferait l'affaire). Sinon, voici un bon moyen d'approcher erf et inverseErf:

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

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

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

PS: Il y a une sorte de bogue dans le rendu de l'URL de Stackoverflow qui ne me permettait pas d'accéder au GSL ci-dessus: http://www.gnu.org/software/gsl . Cela rend également faux quand je fais de l'URL ci-dessus avec un pdf un lien approprié.

Autres conseils

Si X est normal avec une moyenne de 0 et un écart-type sigma, il doit 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 normal avec une moyenne de 0 et un écart type 1. D'où

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 moyenne 0 et stddev 1. Nous avons maintenant besoin du cdf normal inverse (ou de la & fonction de pourcentage < !> quot;), 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é qu'une variable N (0,1) tombe dans l'intervalle [-1.1] est ~ 0,682 (la zone bleu foncé dans cette figure ). Si vous définissez P = 0.682 et a = 1.0, vous obtenez sigma ~ 1.0, qui est bien l’écart-type.

SciPy a un statistiques du sous-package.

Jetez un coup d'œil au projet SciPy . Il devrait répondre à vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top