Padrão C ou Python bibliotecas para calcular o desvio padrão da distribuição normal
-
11-07-2019 - |
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?
Solução
O desvio padrão de uma distribuição média de zero gaussiana com o Pr (-a 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 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. a/(sqrt(2)*inverseErf(P))
erfinv
na biblioteca SciPy, de modo a seguir dá o desvio padrão: a/(math.sqrt(2)*erfinv(P))
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.