Obliczanie percentyla rozkładu normalnego

9

Zobacz tę stronę w Wikipedii:

http://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Agresti-Coull_Interval

Aby uzyskać przedział Agresti-Coull, należy obliczyć percentyl rozkładu normalnego o nazwie . Jak obliczyć percentyl? Czy jest gotowa funkcja, która robi to w Wolfram Mathematica i / lub Python / NumPy / SciPy?z

Ram Rachum
źródło
1
Integralne wyrażenie w „normalnym pliku cdf, który dostałem dokładnie z Wiki” jest niestety wyłączone 1/π . Nie jest znana dokładna formuła dla normalnego cdf lub jego odwrotności przy użyciu skończonej liczby terminów obejmujących standardowe funkcje ( exp,log,sincos itp.), Ale zarówno normalny cdf, jak i jego odwrotność zostały dokładnie zbadane i przybliżone formuły dla obu są zaprogramowane w wielu kalkulatorach, arkuszach kalkulacyjnych, nie wspominając już o pakietach statystycznych. Nie znam R, ale byłbym zdumiony, gdyby nie miał już tego, czego szukasz.
Dilip Sarwate
@DilipSarwate, to naprawione! Robię to za pomocą odwrotnej transformacji, również „niedozwolonej”, aby użyć zbyt dużej ilości wbudowanych. To chyba ze względu na naukę.
user1061210,
1
@Dipip: Nie tylko nie jest znana dokładna formuła, ale jeszcze lepiej, wiadomo, że taka formuła nie może istnieć!
kardynał
1
Metoda Boxa-Mullera generuje próbki ze wspólnego rozkładu niezależnych standardowych normalnych zmiennych losowych. Tak więc histogramy generowanych wartości będą przypominały standardowe rozkłady normalne. Ale metoda Box-Mullera nie jest metodą obliczania wartości z wyjątkiem przypadkowo jak w „Wygenerowałem standardowych normalnych próbek, z których ma wartość lub mniej, a więc i .Φ(x)10484011Φ(1)0.8401Φ1(0.8401)1
Dilip Sarwate
1
Właśnie wybrałem jako przykład liczb, których możesz się spodziewać. Jeśli więc generować próbki standardowego rozkładu normalnego należy oczekiwać, blisko do z próbek mają wartość . 8401Φ(1)=0.84131048413100001
Wdrażasz

Odpowiedzi:

3

Do Mathematiki $VersionNumber > 5 możesz użyć

Quantile[NormalDistribution[μ, σ], 100 q]

dla q-ty percentyla.

W przeciwnym razie musisz najpierw załadować odpowiedni pakiet statystyk.

JM nie jest statystykiem
źródło
(Mam wersję 7.) Nie mam problemu z ładowaniem pakietu Statistics. Ale jak nazywa się tam funkcja? Ponieważ mam wrażenie, że ta Quantilelinia wykona obliczenia ręcznie zamiast używać formuły.
Ram Rachum,
Ocenia je z parametrami symbolicznych (czyli zrobić nie przypisana do wartości mu, sigmai q); powinieneś otrzymać wyrażenie obejmujące funkcję odwrotnego błędu.
JM nie jest statystykiem
16

Strona Johna Cooka, Distribution in Scipy , jest dobrym odnośnikiem do tego typu rzeczy:

In [15]: import scipy.stats

In [16]: scipy.stats.norm.ppf(0.975)
Out[16]: 1.959963984540054
ars
źródło
4

Cóż, nie pytałeś o R, ale w R robisz to używając? Qnorm

(To właściwie kwantyl, a nie percentyl, a przynajmniej tak mi się wydaje)

> qnorm(.5)
[1] 0
> qnorm(.95)
[1] 1.644854
Tal Galili
źródło
1
Kwantyl a percentyl (to tylko kwestia terminologii), j.mp/dsYz9z .
chl
1
Podczas gdy jesteśmy w, w R CI dostosowane CI (np. Agresti-Coull) są dostępne w PropCIspakiecie. Metoda Wilsona jest domyślna w Hmisc::binconf(jak sugerują Agresti i Coull).
chl
3

W Pythonie możesz użyć modułu statystyk z pakietu scipy (poszukaj cdf(), jak w poniższym przykładzie ).

(Wygląda na to, że pakiet transcendentalny obejmuje również zwykłe skumulowane rozkłady).

chl
źródło
0

Możesz użyć funkcji odwrotnej erf , która jest dostępna na przykład w MatLab i Mathematica.

Dla normalnego CDF, zaczynając od

y=Φ(x)=12[1+erf(x2)]

Dostajemy

x=2 erf1(2y1)

Dla log-normalnego CDF, zaczynając od

y=Fx(x;μ,σ)=12erfc(logxμσ2)

Dostajemy

log(x)=μ+σ2 erfc1(2y)
Jean-Victor Côté
źródło
2
czy to nie jest bardziej komentarz niż odpowiedź?
Makro
Mój pomysł polegał na tym, że jeśli masz odwrotność funkcji erf i erfc, problem zostanie rozwiązany. MatLab, na przykład, ma takie zaprogramowane funkcje.
Jean-Victor Côté
@ Jean-VictorCôté Proszę, rozwinąć swoje pomysły w odpowiedzi. W przeciwnym razie wygląda to jak komentarz, jak sugerowano powyżej.
chl
Lognormalne obliczenia nie wyglądają dobrze. W końcu jego odwrotny CDF powinien być identyczny z odwrotnym CDF dla normalnego odstępu dla użycialog(x) zamiast x.
whuber