Pergunta

dizer que temos distribuição normal n (x): média = 0 e \ int _ {- a} ^ {a} n (x) = P

.

O que é a maneira mais fácil para calcular o desvio padrão de tal distribuição? Pode ser há bibliotecas padrão para Python ou C, que são adequados para essa tarefa?

Foi útil?

Solução

O desvio padrão de uma distribuição média de zero gaussiana com o Pr (-a

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

que é a expressão que você está procurando, onde inverseErf é o inverso da função de erro (vulgarmente conhecida como FER).

Para C, o GNU Scientific Library (GSL) é um recurso bom. No entanto ele só tem erf, não inverseErf, então você teria que inverter-lo sozinho (a busca binária simples seria fazer o truque). Alternativamente, aqui está uma boa maneira de erf aproximados e inverseErf:

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

Para Python, inverseErf está disponível como erfinv na biblioteca SciPy, de modo a seguir dá o desvio padrão:

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

PS: Há algum tipo de bug na prestação de URL do Stackoverflow e não me deixou fazer o link com GSL acima: http://www.gnu.org/software/gsl . Ele também torna errado quando eu fizer o URL acima, com um pdf uma ligação adequada.

Outras dicas

Se X é normal com média 0 e padrão Sigma desvio, deve segurar

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

em que N é normal com média e desvio padrão de 0 1. Daí

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

Onde Phi é a função distribuição acumulada (CDF) de uma variável normal com média 0 e stddev 1. Agora precisamos que o inverse cdf normal (ou a "função de ponto por cento"), que em pitão é scipy.stats.norm.ppf (). código de exemplo:

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

Por exemplo, sabemos que a probabilidade de um N (0,1) variável caindo int intervalo [-1,1] é ~ 0,682 (dark área de azul em este número ). Se definir P = 0,682 e uma = 1,0 obter sigma ~ 1,0, o que é de facto o desvio padrão.

SciPy tem um estatísticas sub-pacote.

Dê uma olhada na SciPy Projeto , ele deve ter o que você precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top