Inverse Standardnormalverteilung numerisch auswerten

Neue Frage »

sneeper88 Auf diesen Beitrag antworten »
Inverse Standardnormalverteilung numerisch auswerten
Hallo zusammen,

ich hoffe ich bin bei euch im Forum richtig. Für eine Auswertung benötige ich eine numerische Auswertungsmöglichkeit für die inverse Standardnormalverteilung.

Für die kummulierte Normalverteilung bin ich bereits fündig geworden:
https://en.wikipedia.org/wiki/Normal_dis...the_normal_CDF.
Dort verwende ich die Approximation von Zelen & Severo.

Kann mir bitte jemand sagen, ob es eine entsprechend Approximation auch für die Quantilsfunktion gitb? Die Tabellen, die man überall findet helfen mir leider nicht.

Vielen Dank und beste Grüße
HAL 9000 Auf diesen Beitrag antworten »

Ich hab mal folgende Näherung für benutzt - frag mich nicht, woher die kommt: Mit den Hilfsgrößen sowie soll dann



diese Näherung sein.
 
 
sneeper88 Auf diesen Beitrag antworten »

Hallo HAL9000,

vielen Dank für deine Hilfe, sowas habe ich gesucht. Hast du dafür vielleicht eine Quelle, wo ich auch noch die Fehlerabschätzung nachlesen kann? Oder war das schon genau der Hinweis, dass ich nicht fragen soll woher das kommt^^?

Danke
HAL 9000 Auf diesen Beitrag antworten »

Ja, so etwa... Musst du halt mal ein CAS nehmen und von beiden Inversen (der approximierten und der genaueren vom CAS) die Differenz bilden und diese plotten. Was besseres kann ich dir nicht vorschlagen - ist zu lange her und war für eine Anwendung, die nicht so sonderlich genau sein musste (0.01 Abweichung war Ok, und das müsste die Formel schaffen).
sneeper88 Auf diesen Beitrag antworten »

Ok weiß ich Bescheid, bin auf jeden Fall dankbar überhaupt eine Approximation zu haben. Fehlerabschätzung mache ich im Nachgang.

Danke noch mal
Finn_ Auf diesen Beitrag antworten »

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
from math import pi, exp, sqrt

def sgn(x):
    return -1 if x<0 else 0 if x==0 else 1

def bisection(f,x,a,b):
    for k in range(60):
        m = 0.5*(a+b);
        if f(m)-x<0: a = m
        else: b = m
    return m

def incomplete_Gamma_continued_fraction(a,x,n):
    y = 0
    for k in range(n,0,-1):
        y = k*(k-a)/(x-y-a+2*k+1)
    return exp(-x)*x**a/(x-y-a+1)

def incomplete_gamma_power_series(a,x,n):
    y = 0
    p = 1/a
    for k in range(1,n):
        y += p
        p = p*x/(a+k)
    return y*exp(-x)*x**a

def erf(x):
    if abs(x)>8: return sgn(x)
    if abs(x)>1.7:
        y = sqrt(pi)-incomplete_Gamma_continued_fraction(0.5,x*x,26)
    else:
        y = incomplete_gamma_power_series(0.5,x*x,26)
    return sgn(x)*y/sqrt(pi)

def cdf_normal(x,mu=0,sigma=1):
    return 0.5+0.5*erf((x-mu)/(sqrt(2)*sigma))

def cdf_normal_inv(x):
    return bisection(cdf_normal,x,-100,100)
HAL 9000 Auf diesen Beitrag antworten »

@Finn

So gehts auch, vor allem wenn nicht allzuviele Zellen diese Inverse aufrufen und man daher genug Zeit für diese rechenaufwändige Methode hat.


Gestatte mir eine kleine numerische Anmerkung zu deinem Bisektions-Suchintervall :

Die nächstkleinere Zahl zur 1, die man in Excels Floating-Point-Format darstellen kann, ist . Der zugehörige gesuchte Fumktionswert wäre hier

.

Nach der anderen Seite 0 ist das anders, da greifen ja die Vorzüge des Floating-Point-Format: Die kleinste positive darstellbare Zahl ist da ungefähr mit

.

Man kann also das Suchintervall getrost auf verkleinern, ohne das man irgendwas verschenkt. Augenzwinkern


EDIT: War jetzt irgendwie der vermutlich irrigen Annahme, es ginge um Excel (weiß auch nicht, wie ich darauf hier kam, wohl eine Verwechslung), na egal. Augenzwinkern
sneeper88 Auf diesen Beitrag antworten »

Danke euch beiden noch mal.

Musste jetzt auf die Lösung von Finn umschwenken. Dauert zwar etwas länger aber es ist deutlich genauer für meine Zwecke. Hatte vorher doch Abweichungen die ich so nicht stehen lassen konnte.

Jetzt siehts viel besser aus. Danke sehr
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »