|
|
ML Schätzung für univariate GARCH |
|
mcashmir |
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 10:59
Titel: ML Schätzung für univariate GARCH
|
|
Hallo geehrte Community,
ich versuche mich gerade an einem DCC GARCH, mit der Auflage nur die Standardversion von Matlab(+Simulink) zu nutzen. Leider schaffe ich es nicht eine loglikelihood function aufzustellen, beziehungsweise habe nicht mal ansatzweise ein Idee wie man das machen kann in Matlab.
meine LogLik.fun schaut wie folgt aus:
max:=0.5*sum(1:T) ln(h_t)-Sum(1:T)[(residuum_t' * residuum_t)/h_t]
h_t= w/(1-a-b)
Maximiert werden soll nach w, a und b.
Wobei w,a,b>0 und a+b<1 sein sollen.
Seit 2 Tagen kommen ich nicht weiter,deshalb wäre ich für eure Hilfe sehr dankbar!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 11:41
Titel:
|
|
Hallo,
in MATLAB besteht für die Lösungen von Optimierungsproblemen nur die Möglichkeit über
fminsearch
.
Die Nebenbedingungen können über if-Abfragen oder Strafterme eingearbeitet werden.
Darf man fragen, wie die Auflage, nur MATLAB(+Simulink) zu verwenden, zustandekommt?
Grüße,
Harald
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 11:54
Titel:
|
|
Ich stehe ehrlich gesagt komplett auf dem Schlauch wie man das ganze machen soll und blicke bei den ganzen Optionen und Optimierungsbefehlen nicht wirklich durch. Die Auflage wurde seitens der Uni gestellt
Wenn ich die zu maximierende Funktion *(-1) nehme kriege ich ja die selben Ergebnisse raus.
Es geht ja darum, die bedingte Varianz in t zu berchenen. Diese ist im Model wie folgt beschrieben und in matlab implementiert:
Schätzt man das ganze über die loglikelihood function sieht das wie folgt aus:
Nun soll ich die Paramater so schätzen, dass sumll->max oder wie du vorschlägst -1*sumll->min
Ich wüsste allerdings echt nicht wie...
ps: res1 is ein 3388X1 Vektor
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 13:05
Titel:
|
|
Hallo,
Zitat: |
blicke bei den ganzen Optionen und Optimierungsbefehlen nicht wirklich durch. |
Ich habe dir einen Befehl genannt, der max. 3 Argumente annimmt. Das ist doch recht überschaubar?
Zitat: |
Wenn ich die zu maximierende Funktion *(-1) nehme kriege ich ja die selben Ergebnisse raus. |
Hast du es denn mal versucht? Die Optimierungsroutinen in MATLAB minimieren. Wenn du mit -1 multiplizierst, wird aus einem Maximum ein Minimum. Somit kannst du die Optimierungsroutinen von MATLAB dazu verwenden, ein Maximum zu finden.
Zu
Eine Schleife über einen Wert ergibt wenig Sinn (und ist hier komplett unnötig, da der Code vektorisiert ist).
In MATLAB ist das Dezimaltrennzeichen der Punkt (0,5 muss also 0.5 sein).
Wenn du komponentenweise teilen willst, dann ./ statt /
Zitat: |
Die Auflage wurde seitens der Uni gestellt |
Vielleicht hätte ich die Frage klarer formulieren sollen. Was ist denn der Sinn dieser Auflage?
Grüße,
Harald
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 14:58
Titel:
|
|
ok ich glaube der Ausdruck var(..) war hier verwirrend.
Es geht um die bedingte Varianz welche zu Teilen autoregressiv ist, dh.
die Varianz heute hängt noch auch von der vergangenen Varianz ab. Nimm es mir bitte nicht übel, dass ich hier so viele Fragen stelle, aber die einzigen Codes die ich für Matlab bis jetzt gemacht habe waren eher einfach Sachen und da durften wir Toolboxen nutzen.
Soweit ich das verstanden habe, kann man unter fminsearch keine Nebenbedingungen einfügen. Die sind jedoch wichtig für die stationarität des Prozesses.
In der Dokumentation sind nur einfach Fälle beschrieben, die mir nicht Ansatzweise helfen (als Matlab-Newbie)
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 15:08
Titel:
|
|
Hallo,
errechne doch h1 am Anfang von sumll?
Was die Nebenbedingungen angeht, darf ich mich zitieren:
Zitat: |
Die Nebenbedingungen können über if-Abfragen oder Strafterme eingearbeitet werden. |
Die Frage, warum du keine Toolboxen verwenden sollst, besteht im übrigen weiterhin.
Zitat: |
In der Dokumentation sind nur einfach Fälle beschrieben |
In der Dokumentation sind Beispiele mit zwei Variablen, und du hast eben drei. Wenn du die Fälle als einfach ansiehst, um so besser - deine Aufgabe ist nämlich mit Ausnahme der Nebenbedingungen genau von Example 2 abgedeckt.
Grüße,
Harald
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 15:20
Titel:
|
|
Hallo nochmal,
sry, dass ich nicht auf die Frage eingegangen bin warum, Toolboxen nicht erlaubt sind.
Mein Prof meinte nur er will sehen, dass ich eine Auswertung komplett selbstständig erarbeiten kann. Ich bin im Übrigen Volkswirt, ohne jegliche Absichten im Investment Banking oder in der Wissenschaft zu landen und eine solche Auflage ist nicht in der Prüfungsordnung enthalten.
Also wenn ich dich richtig verstanden haben sollte das ganze so ausschauen:
mir stellt sich auch die fragen nach dem Startwert, soll ich da einfach 0 eingeben oder frei lassen?
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 26.06.2015, 15:28
Titel:
|
|
Zitat: |
Mein Prof meinte nur er will sehen, dass ich eine Auswertung komplett selbstständig erarbeiten kann |
Ich verstehe nicht warum die Nutzung einer Toolbox da im Wege steht? Mit dieser Logik (ich weiss, dünnes Eis ) kann man ja gleich sagen, mache es in C und nutze das effizienzfördernde MATLAB nicht.
Andreas[/code]
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 15:36
Titel:
|
|
Hallo,
Zitat: |
Mein Prof meinte nur er will sehen, dass ich eine Auswertung komplett selbstständig erarbeiten kann. |
Dann ist es wohl nicht Sinn der Sache, sich Hilfe in einem Forum zu holen?
Sich den korrekten Einsatz einer Toolbox-Funktion wirklich selbst zu erarbeiten halte ich für deutlich sinnvoller.
Was den Code angeht: ich habe dich auf ein bestimmtes Beispiel hingewiesen. Dein Code folgt dem leider in mehreren Aspekten nicht.
Grüße,
Harald
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 15:37
Titel:
|
|
@Andreas: Stimme ich vollkommen zu.
Also ich habe jetzt folgendes gemacht:
und den code für sumll ausgegliedert in ein eigenständiges sumll.m:
und bekomme folgende Fehlermeldung:
Error in fminsearch (line 190)
fv(:,1) = funfcn(x,varargin{:});
Error in DCCGARCH (line 105)
h1=fminsearch(@sumll,0)
Zuletzt bearbeitet von mcashmir am 26.06.2015, 15:49, insgesamt 2-mal bearbeitet
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 15:41
Titel:
|
|
@Harald. Sorry, ich guck mir das jetzt nochmal an, aber gewisse Sachen sind für mich als Neuling nicht einfach zu verstehen und ich hoffe du verstehst das. Naja, meine Arbeit dreht sich nicht um das Programmieren, sondern um die Ergebnisse. Dem Prof ist es egal, der Dozent akzeptiert es nicht. Und wenn ich mir hier keine Hilfe holen kann, wo dann?
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 17:11
Titel:
|
|
|
|
|
@Harald:
Auszug aus der Matlab Doku:
Zitat: |
If fun is parameterized, you can use anonymous functions to capture the problem-dependent parameters. For example, suppose you want to minimize the objective function myfun defined by the following function file:
function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2;
Note that myfun has an extra parameter a, so you cannot pass it directly to fminsearch. To optimize for a specific value of a, such as a = 1.5.
Assign the value to a.
a = 1.5; % define parameter first
Call fminsearch with a one-argument anonymous function that captures that value of a and calls myfun with two arguments:
x = fminsearch(@(x) myfun(x,a),[0,1])
|
Das Problem an Example 2 ist, dass der angewandte Parameter in der Funktion auftaucht. Bei mir tauchen die Parameter in der schleife auf, welche nötig ist um die bedingte Varianz zu berechnen, minimiert wird jedoch die (negative)Likelihood Funktion.
Zudem wird der Wert für so wie ich das verstanden habe auf 1.5 fixiert. Bei mir ist keines der Parameter fixiert. Die h1 hängt von a1 b1 w1 und von sich selbst ab, ich kann h1 auch nicht so einfach ausklammern und nach diesen Parametern soll die Funktion ja minmiert werden.
Deshalb verstehe ich nicht, wieso du annimmst, dass dieses Beispiel so einfach auf mein Problem zu transferieren ist.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 18:51
Titel:
|
|
Hallo,
Zitat: |
Bei mir tauchen die Parameter in der schleife auf, welche nötig ist um die bedingte Varianz zu berechnen, minimiert wird jedoch die (negative)Likelihood Funktion. |
Und wovon hängt die Likelihood-Funktion ab? U.a. von der bedingten Varianz. Diese muss also natürlich für jedes (a, b, w) neu berechnet werden. Das gehört also in die Zielfunktion rein.
Zitat: |
Bei mir ist keines der Parameter fixiert. |
Und was ist mit res1?
Zudem: wenn kein fixierter Parameter dabei sein sollte, wäre es doch umso besser - dann könntest du den Teil nämlich einfach weglassen.
Grüße,
Harald
|
|
|
mcashmir |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 25.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 20:55
Titel:
|
|
Hallo,
Zitat: |
Und was ist mit res1? |
res1 ist der Datensatz bzw. ein Vektor mit Daten für den ich die Volatilität schätzen will.
Zitat: |
Und wovon hängt die Likelihood-Funktion ab? U.a. von der bedingten Varianz. Diese muss also natürlich für jedes (a, b, w) neu berechnet werden. Das gehört also in die Zielfunktion rein. |
Wen ich dich richtig verstanden habe, muss die For-Schleife, mit der h1 berechnet wird, also auch in die Funktion rein. Das sieht dann bei mir so aus:
Aber irgendwas mache ich anscheinend falsche... Mit der Fehlermeldung:
Error using sumll (line 14)
Not enough input arguments.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 22:03
Titel:
|
|
|
|
|
Hallo,
Zitat: |
res1 ist der Datensatz bzw. ein Vektor mit Daten für den ich die Volatilität schätzen will. |
Und dieser Datensatz dürfte fest sein, oder? Also ist er zu behandeln wie das a in dem Beispiel. Wenn du die Daten innerhalb der Funktion lädst, dauert das ein vielfaches der normal nötigen Zeit.
Halte dich doch bitte an die Dokumentation.
* Warum versuchst du fminsearch(sumll) ? In der Doku wird nicht zum Spaß in jedem Beispiel mit @ ein Function Handle erzeugt.
* Die Zielfunktion muss so formuliert sein, dass sie von einem Eingabeargument abhängt. Du musst also a1, b1, w1 zu einer Variablen (z.B. x) zusammenfassen und diese dann innerhalb der Funktion extrahieren - wie im Beispiel gezeigt.
Zitat: |
if i<1
h1(i)=var(cac) |
ist überflüssig, wenn i nie < 1 sein kann.
Die Variable sumll sollte außerhalb der for-Schleife berechnet werden. Es ist doch sinnlos, das in jeder Iteration zu überschreiben.
Zitat: |
a1=(0:0.0001:1);
b1=(0:0.0001:1);
w1=(0:0.0001:3);
a1+b1<1 |
hat keinerlei Auswirkung, was soll das also? Ich kann nur dazu raten, die für solche Probleme geschaffene Funktion fmincon zu verwenden statt zu versuchen, es mit fminsearch irgendwie hinzubiegen.
lik soll das Ausgabeargument von sumll sein, wird aber in der Funktion nicht definiert.
lik kommt ansonsten nur im fminsearch-Aufruf vor. Dieser Aufruf muss separat erfolgen.
Wie wäre es für das selbstständige Arbeiten eigentlich, zumindest mal ein wenig im Internet nachzulesen? Allein bei gomatlab gibt es 289 Forumbeiträge zu fminsearch und 285 Beiträge zu fmincon.
Grüße,
Harald
|
|
|
|
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.
|
|