|
|
Mischverteilung: Parameterberechnung mit MLE |
|
JacksoN123 |
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.01.2015, 16:04
Titel: Mischverteilung: Parameterberechnung mit MLE
|
|
Hallo.
Ich habe eine Zeitreihe von Daten (Renditen). Ich weiß, dass diese Daten aus einer Mischverteilung stammen, die aus zwei Normalverteilungen zusammengesetzt ist. Nun möchte ich die Parameter errechnen, für die die Maximumlikelihood Funktion am größten wird.
Hierzu definiere ich mir meine Dichtefunktion:
Da x die Daten sind, habe ich also 5 unbekannte Parameter, die ich mit Hilfe der MLE Funktion ermitteln möchte.
Hierfür verwende ich:
Jedoch gibt Matlab Fehlermeldungen aus:
Zitat: |
??? Error using ==> mlecustom at 169
Error while evaluating the user-supplied pdf function
'@(x,mu1,sigma1,mu2,sigma2,p)normpdf(x,mu1,sigma1)*p+normpdf(x,mu2,sigma2)*(1-p)'.
Error in ==> mle at 225
phat = mlecustom(data,varargin{:});
Caused by:
Input argument "p" is undefined. |
Ich glaube ich habe die Syntax der MLE Funktion nicht ganz verstanden. Ich hoffe ihr könnt mir helfen.
Ich danke im Voraus
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.01.2015, 16:39
Titel:
|
|
Hallo,
was ist der Wert der Variable start bei dir?
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.01.2015, 17:34
Titel:
|
|
Da schließt sich direkt die nächste Frage an. Oben genannte Formel ist für eine einfache Normalverteilung mit zwei Parametern.
Kann ich denn die Startwerte für alle fünf Parameter festlegen und falls ja, wie?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.01.2015, 20:37
Titel:
|
|
Hallo,
dann wundert mich das nicht. Wenn du 5 Parameter hast, musst du schon auch 5 Startwerte angeben.
Eine Möglichkeit: du nimmst Mittelwert und Standardabweichung von jeweils der linken und der rechten Hälfte der Daten, und p = 0.5.
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.01.2015, 20:53
Titel:
|
|
Ich habe jetzt fünf Startwerte wie folgt angegeben:
und dann wieder
Jetzt wirft andere Fehlermeldungen aus:
Zitat: |
??? Error using ==> mlecustom>llf_pdfcdf at 443
The PDF function returned negative or zero values.
Error in ==> fminsearch at 320
x(:) = xr; fxr = funfcn(x,varargin{:});
Error in ==> mlecustom at 186
[phat,nll,err,output] = ...
Error in ==> mle at 225
phat = mlecustom(data,varargin{:}); |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.01.2015, 21:14
Titel:
|
|
Hallo,
mal den Debugger verwenden?
Für weitere Unterstützung bitte Beispieldaten zur Verfügung stellen, bei denen das Problem auftritt.
Bei deinen Startwerten sieht es so aus, als ob die beiden Normalverteilungen sehr nahezu deckungsgleich sind. Das ist sicher nicht optimal.
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.01.2015, 23:06
Titel:
|
|
Die Startwerte habe ich jetzt einfach so angenommen. Die Werte habe ich in einer Excel Tablle hinterlegt, da ich hier kein m file hochladen kann.
Den Debugger habe ich noch nicht probiert, da ich nicht weiß wie ich damit umegehen soll.
Beschreibung: |
|
Download |
Dateiname: |
x.xls |
Dateigröße: |
169 KB |
Heruntergeladen: |
583 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.01.2015, 23:45
Titel:
|
|
Hallo,
Zitat: |
Die Startwerte habe ich jetzt einfach so angenommen. |
Das ist selten eine gute Idee.
Versuch's doch mal mit den vorgeschlagenen Startwerten.
Davon abgesehen stellt sich mir bei den Daten die Frage, was das bringen soll. Wenn ich mir ein Histogramm ansehe, kann ich jedenfalls keine zwei verschiedenen Peaks unterscheiden.
Was das Debuggen angeht, siehe z.B. hier:
[url]de.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html[/url]
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2015, 10:45
Titel:
|
|
Ich dank dir schonmal für deine Hilfe. Jetzt können tatsächlich Werte errechnet werden.
Mit den Peaks hast du recht, jedoch nehme ich eine Mischverteilung an, da eine einzelne Normalverteilung einen zu schlechten Fit liefert.
Was mich zudem interessiert, ist der Wert der ML. Da Matlab ihn nicht direkt ausgibt, geh ich davon aus, dass man ihn manuell berechnen muss. Bisher mach ich das so:
Wie man erkennt, habe ich die Werte von phat, also meine MLE-Schätzung per Hand eingegeben. Ist es möglich diese automatisiert in die Dichtefunktion MV einzulesen ohne Schleifen zu verwenden?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.01.2015, 11:26
Titel:
|
|
Hallo,
Zitat: |
jedoch nehme ich eine Mischverteilung an, da eine einzelne Normalverteilung einen zu schlechten Fit liefert |
Halte ich für keine gute Idee, da das m.E. nur eine kosmetische Verbesserung durch eine größere Anzahl Parameter ist. Ich würde andere Verteilungen versuchen oder eine nichtparametrische Verteilung.
Zitat: |
Ist es möglich diese automatisiert in die Dichtefunktion MV einzulesen ohne Schleifen zu verwenden? |
Ich würde wie gezeigt max als Variablenname vermeiden, da dies der Name einer gebräuchlichen Funktion ist.
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2015, 15:00
Titel:
|
|
Ich hab jetzt die Werte der ML ausgerechnet.
Mischverteilung
Zitat: |
phat = 0.0005 0.0146 -0.0021 0.0630 0.9014
Wert der ML-Funktion einer Mischverteilung maxLHMV= 6.6096e+004 |
und Normalverteilung
Zitat: |
phat = 0.0002 0.0242
Wert der ML-Funktion einer Normalverteilung maxLHNV5.1594e+004 |
Diese habe ich in ein Informationskriterium eingesetzt K ist die Parameteranzahl des Modells:
Mischverteilung (K=5)= -12.1977
Normalverteilung (K=2)= -17.7023
Da kleinere Werte besser sind, sollte man wie du schon sagtest die Normalverteilung wählen. D.h. mein Problem ist gelöst. DANKE
Eine kleine Nebenfrage habe ich jedoch noch. Ich wollte die Mischverteilung als permanente Funktion speichen. Hierzu habe ich im Editor geschreiben:
Wenn ich sie dann starte bekomm ich die Fehlermeldung:
Zitat: |
??? Input argument "x" is undefined.
Error in ==> MV at 3
f=normpdf(x,mu1,sigma1)*p+normpdf(x,mu2,sigma2)*(1-p); |
Was habe ich übersehen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.01.2015, 15:39
Titel:
|
|
Hallo,
du musst die Funktion mit Eingabeargumenten aufrufen.
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.01.2015, 09:49
Titel:
|
|
Ich dachte die Funktion bekommt ihre Werte, da ich ja die Datei "x.mat" im Workspace habe.
Oder ist das "x" in meiner Funktion ein anderes als das der Daten x?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 09.01.2015, 09:56
Titel:
|
|
Hallo,
es hilft nichts, dass eine .mat-Datei oder eine Variable existiert. Sie muss schon wirklich übergeben werden.
Der Aufruf kann also so lauten
aber z.B. auch so
oder
Grüße,
Harald
|
|
|
JacksoN123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 07.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.01.2015, 11:30
Titel:
|
|
Irgendwie steh ich auf dem Schlauch. Vielleicht versuch ich es nochmal anders zu erklären.
Zeil ist es, die MLE Schätzung für meine Dichtefunktion durchzuführen. Da die Dichtefunktion nicht standardmäßig in Matlab integriert ist, definiere ich sie mir. Da ich diese Dichtefunktion immer wieder benötige, wäre es sinnvoll, wenn ich diese speichern und aufrufen könnte.
Wenn ich diesen Weg gehe, dann muss ich diese Zeile jedesmal eintippen wenn ich Matlab neu starte.
Daher dachte ich, ich schreibe eine m.Datei die genau das oben macht:
Aber offensichtlich ist das nicht so. Denn wenn ich
eingebe, kommt
Zitat: |
??? Input argument "x" is undefined. |
.
Meine Frage nun, wie kann ich MV=@(...) abspeichern, so dass ich das nicht jedes mal eingeben muss wenn ich Matlab neu starte.
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|