Die Mathe-Redaktion - 18.06.2019 03:46 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktAnmeldung MPCT Sept.
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 314 Gäste und 5 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 

Antworte auf:  Python: Cumulative Distribution Function implementieren von Lucky_7
Forum:  Programmieren, moderiert von: matph

[Zur Forum-Gliederung] [Wie man Fragen beantwortet]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                     
                    
                  
Nachricht:


 
 


Eingabehilfen (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-Bereich] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-Bereich][show-Bereich] [Quelltext [num.]][?]
 Zeige Vorschau      Schreibe im fedgeoFormeleditor oder mit Latex.

Wähle Smilies für Deine Nachricht: :-) :-( :-D ;-) :-0 8-) :-? :-P :-|
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
Lucky_7
Aktiv
Dabei seit: 21.01.2018
Mitteilungen: 140
Herkunft:
 Beitrag No.3, eingetragen 2019-04-27 12:36    [Diesen Beitrag zitieren]

Ok. Um d_l zu berechnen, benötige ich aber weiterhin eine Schleife - sehe ich das richtig ?
python
alpha = 0.05 # 5% significance level
cdf = np.cumsum(pdf)/np.sum(pdf)
hypoCdf = norm(loc=mean(pdf), scale=np.std(pdf)).cdf(x_grid) #cdf of gaussian distribution that we assume as our null hypothesis 
d_u = abs(cdf - hypoCdf) # upper limit
d_l = np.zeros(len(cdf))
for idx in range(0, len(cdf)):
    if idx == 0:
        d_l[idx] = 0  
    else:
        d_l[idx] = abs(cdf[idx-1] - hypoCdf[idx]) #lower limit
d_crit = np.sqrt(-0.5*np.log(alpha/2))/np.sqrt(len(pdf))
d_u_max = np.max(d_u)
d_l_max = np.max(d_l)
if d_u_max > d_crit or d_l_max > d_crit:
    print("result: null hypothesis rejected")
else:
    print("result: failed to reject null hypothesis")

... kannst du mir erklären, warum der KS-Test überhaupt d_l berechnet? Sollte es nicht eigentlich genügen, sich d_u anzuschauen? d_u vergleicht doch die CDF der Hypothese und der Sample-Distribution. Wozu gibt es dann noch d_l ?


schnitzel
Aktiv
Dabei seit: 26.02.2009
Mitteilungen: 139
Herkunft:
 Beitrag No.2, eingetragen 2019-04-26 19:33    [Diesen Beitrag zitieren]

Hi,

Schleifen über Indices ist in python oft vermeidbar. Wenn man Schleifen benutzt, dann am besten direkt über die Elemente.
Hier sollte das aber auch mit der Funktion np.cumsum funktionieren.

Gruß


Lucky_7
Aktiv
Dabei seit: 21.01.2018
Mitteilungen: 140
Herkunft:
 Beitrag No.1, eingetragen 2019-04-26 17:20    [Diesen Beitrag zitieren]

ok, ich denke es ist notwendig die gebildete Summe noch durch die Gesamtsumme zu teilen:
python
for idx in range(0, len(pdf)):
    if idx == 0:
        cdf[idx] = pdf[idx]/np.sum(pdf)
    else:
        cdf[idx] = np.sum(pdf[:idx])/np.sum(pdf)
    hypoCdf[idx] = norm(loc=mean(pdf), scale=np.std(pdf)).cdf(x_grid[idx])

Davon abgesehen, habe ich auch die hypothetische CDF falsch ausgewertet.
Für die CDF der geschätzten PDF dürfte es so aber stimmen. ..


Lucky_7
Aktiv
Dabei seit: 21.01.2018
Mitteilungen: 140
Herkunft:
 Themenstart: 2019-04-26 11:38    [Diesen Beitrag zitieren]

Hey,

ich versuche gerade einen so genannten Kolmogorov-Smirnov Test zu implementieren.

Hierbei habe ich eine geschätze Wahrscheinlichkeitsdichte-Funktion (PDF) gegeben und möchte die Cumulative-Distribution-Function (CDF) hieraus bilden. Das sollte eigentlich nur das Integral der PDF sein.
Ich habe gedacht, das würde ich durch diese Zeile:
python
cdf[idx] = np.sum(pdf[:idx])
im unten stehenden Code erreichen.

Irgendetwas mache ich aber falsch, weil meine CDF, die ich aus der geschätzten PDF berechne, Werte deutlich größer 1 annimmt:


Ich erkenne wirklich nicht, wo der Fehler liegt.
Dies ist der Code, den ich verwende:
python
cdf = np.zeros(len(pdf))
hypoCdf = np.zeros(len(pdf))
d_u = np.zeros(len(pdf)) #upper
d_l = np.zeros(len(pdf)) #lower
alpha = 0.05
for idx in range(0, len(pdf)):
    cdf[idx] = np.sum(pdf[:idx])
    hypoCdf[idx] = norm(loc=mean(pdf), scale=np.std(pdf)).cdf(idx) #cdf of gaussian distribution that we assume as our null hypothesis 
for idx in range(0, len(cdf)):
    d_u[idx] = abs(cdf[idx] - hypoCdf[idx])
    if idx == 0:
        d_l[idx] = 0  # is this correct ? 
    else:
        d_l[idx] = abs(cdf[idx-1] - hypoCdf[idx])
d_crit = np.sqrt(-0.5*np.log(alpha/2))/np.sqrt(len(pdf))
d_u_max = np.max(d_u)
d_l_max = np.max(d_l)
if d_u_max > d_crit or d_l_max > d_crit:
    print("result: null hypothesis rejected")
else:
    print("result: failed to reject null hypothesis")
plt.figure()
plt.plot(x_grid, cdf, linewidth = 1, alpha = 1, color = 'r')
plt.plot(x_grid, hypoCdf, linewidth = 1, alpha = 1, color = 'k')
plt.show()

..wenn euch das komplette Skript, oder die Daten interessieren, die ich zum Erzeugen der pdf verwendet habe, findet ihr einen Link in dieser Frage hier


 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]