Berechnung des Perzentils der Normalverteilung

9

Siehe diese Wikipedia-Seite:

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

Um das Agresti-Coull-Intervall zu erhalten, muss ein Perzentil der Normalverteilung berechnet werden, das . Wie berechne ich das Perzentil? Gibt es eine vorgefertigte Funktion, die dies in Wolfram Mathematica und / oder Python / NumPy / SciPy ausführt?z

Ram Rachum
quelle
1
Der integrale Ausdruck im "normalen cdf, den ich genau aus dem Wiki bekommen habe" ist leider um den Faktor . Es ist keine genaue Formel für das normale cdf oder seine Umkehrung unter Verwendung einer endlichen Anzahl von Begriffen bekannt, die Standardfunktionen (exp,log,sincosusw.) verwenden, aber sowohl das normale cdf als auch seine Umkehrung wurden vielfach untersucht, und es gibt ungefähre Formeln für beide programmiert in viele Rechner, Tabellenkalkulationen, ganz zu schweigen von Statistikpaketen. Ich bin nicht mit R vertraut, aber ich wäre erstaunt, wenn es nicht schon das eingebaut hätte, wonach Sie suchen. 1/πexp,log,sincos
Dilip Sarwate
@ DilipSarwate, es ist behoben! Ich mache dies mit inverser Transformation, auch "nicht erlaubt", zu viel eingebaut zu verwenden. Es ist zum Zwecke des Lernens, nehme ich an.
user1061210
1
@ Dilip: Es ist nicht nur keine genaue Formel bekannt, besser noch, es ist bekannt, dass eine solche Formel nicht existieren kann!
Kardinal
1
Die Box-Muller-Methode generiert Stichproben aus einer gemeinsamen Verteilung unabhängiger normaler Standard-Zufallsvariablen. Histogramme der erzeugten Werte ähneln also Standardnormalverteilungen. Die Box-Muller-Methode ist jedoch keine Methode zur Berechnung von Werten von außer im Übrigen wie in "Ich habe 10 4 normale Standardproben erzeugt , von denen 8401 den Wert 1 oder weniger hat, und somit Φ ( 1 ) 0,8401 und Φ - 1 ( 0,8401 ) 1 .Φ(x)10484011Φ(1)0.8401Φ1(0.8401)1
Dilip Sarwate
1
Ich habe gerade als Beispiel für die Arten von Zahlen gewählt, die Sie erwarten könnten. Φ ( 1 ) = 0,8413 ... und so , wenn Sie erzeugen 10 4 Proben einer Standardnormalverteilung, sollten Sie erwarten , nahe zu 8413 der 10000 Proben Wert haben 1 . Sie implementieren die Box-Muller-Methode korrekt, verstehen aber nicht die Ergebnisse, die Sie erhalten, und beziehen sie nicht auf das PDF usw.8401Φ(1)=0.84131048413100001
Dilip Sarwate

Antworten:

3

Für Mathematica können $VersionNumber > 5 Sie verwenden

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

für das q-te Perzentil.

Andernfalls müssen Sie zuerst das entsprechende Statistikpaket laden.

JM ist kein Statistiker
quelle
(Ich habe Version 7.) Ich habe kein Problem beim Laden des Statistikpakets. Aber wie heißt die Funktion dort? Weil ich den Eindruck habe, dass diese QuantileZeile die Berechnung manuell durchführt, anstatt eine Formel zu verwenden.
Ram Rachum
Auswerten mit symbolischen Parameter (dh nicht Werte zuweisen mu, sigmaund q); Sie sollten einen Ausdruck erhalten, der die inverse Fehlerfunktion beinhaltet.
JM ist kein Statistiker
16

John Cooks Seite " Distributions in Scipy" ist eine gute Referenz für diese Art von Dingen:

In [15]: import scipy.stats

In [16]: scipy.stats.norm.ppf(0.975)
Out[16]: 1.959963984540054
ars
quelle
4

Nun, Sie haben nicht nach R gefragt, aber in R tun Sie es mit? Qnorm

(Es ist eigentlich das Quantil, nicht das Perzentil, oder so glaube ich)

> qnorm(.5)
[1] 0
> qnorm(.95)
[1] 1.644854
Tal Galili
quelle
1
Quantil vs. Perzentil (es ist nur eine Frage der Terminologie), j.mp/dsYz9z .
Chl
1
Während wir in R sind, sind in R Wald-bereinigte CIs (zB Agresti-Coull) im PropCIsPaket enthalten. Wilsons Methode ist die Standardeinstellung in Hmisc::binconf(wie von Agresti und Coull vorgeschlagen).
Chl
2

In Python können Sie das Statistikmodul aus dem scipy- Paket verwenden (suchen Sie nach cdf(), wie im folgenden Beispiel ).

(Es scheint, dass das transzendentale Paket auch übliche kumulative Verteilungen enthält).

chl
quelle
0

Sie können die inverse erf-Funktion verwenden , die beispielsweise in MatLab und Mathematica verfügbar ist.

Für die normale CDF ab

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

Wir bekommen

x=2 erf1(2y1)

Für die logarithmisch normale CDF ab

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

Wir bekommen

log(x)=μ+σ2 erfc1(2y)
Jean-Victor Côté
quelle
2
Ist das nicht eher ein Kommentar als eine Antwort?
Makro
Meine Idee war, dass das Problem gelöst ist, wenn Sie Inversen für die Funktionen erf und erfc haben. MatLab verfügt beispielsweise über solche vorprogrammierten Funktionen.
Jean-Victor Côté
@ Jean-VictorCôté Bitte entwickeln Sie Ihre Ideen in Ihrer Antwort. Ansonsten sieht es lediglich wie ein Kommentar aus, wie oben vorgeschlagen.
Chl
log(x)x