Simulation des realen Geschäftszyklus


10

Grundsätzlich muss ich Hartleys "A User's Guide to Solving Real Business Cycle Models" ( http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf ) replizieren . Insbesondere möchte ich das dynamische System simulieren, das durch das Modell impliziert wird, das wie folgt angegeben ist:

Geben Sie hier die Bildbeschreibung ein

Dabei ist Verbrauch, das Arbeitskräfteangebot, das Kapital, der autoregressive technologische Prozess, der Output und die Investition.h k z y ichkzyi

Ich simuliere es mit der folgenden Logik: Sagen wir zum Zeitpunkt , alles ist im stationären Zustand und alle Werte sind 0, von denen wir . Dann löse ich bei indem ich dem System durch einen Schock gebe , nach und (da ich das 'schockierte' und zuvor erhalten habe . Dann ich diese beiden ein, um den Rest abzurufen, nämlich - und wiederhole den Vorgang.k t + 1 t + 1 & epsi; c t + 1 h t + 1 z t + 1 k t + 1 y t + 1 , i t + 1 , k t + 2tkt+1t+1εct+1ht+1zt+1kt+1yt+1,it+1,kt+2

Leider bekomme ich einen explosiven Prozess, der keinen Sinn ergibt:

Geben Sie hier die Bildbeschreibung ein

Ich füge auch R-Code hinzu, der verwendet wird, um dies zu simulieren:

n<-300

data.simulated <- data.table(t = 0, zval = 0, cval = 0, hval = 0, kval = 0, yval = 0, ival = 0)
data.simulated <- rbind(data.simulated, data.table(t = 1, kval = 0), fill = TRUE)

for (ii in 1:n){

  ##initial shocks
  eps <- rnorm(1, mean = 0, sd = 0.007)
  zt1 <- data.simulated[t == ii - 1, zval]*0.95 + eps
  kt1 <- data.simulated[t == ii, kval]

  ##solve for ct, ht
  lmat <- matrix(c(1, -0.54, 2.78, 1), byrow = T, ncol = 2)
  rmat <- matrix(c(0.02 * kt1 + 0.44 * zt1, kt1 + 2.78 * zt1), ncol = 1)

  solution <- solve(lmat, rmat)
  ct1 <- solution[1, ]
  ht1 <- solution[2, ]

  ##now solve for yt1 and kt2 and it1
  yt1 <- zt1 + 0.36 * kt1 + 0.64 * ht1
  kt2 <- -0.07 * ct1 + 1.01 * kt1 + 0.06 * ht1 + 0.1 * zt1
  it1 <- 3.92 * yt1 - 2.92 * ct1

  ##add to the data.table the results
  data.simulated[t == ii, c("zval", "cval", "hval", "yval", "ival") := list(zt1, ct1, ht1, yt1, it1)]
  data.simulated <- rbind(data.simulated, data.table(t = ii + 1, kval = kt2), fill = TRUE)
}


a <- data.simulated[, list(t, cval, ival, yval)]
a <- data.table:::melt.data.table(a, id.vars = "t")
ggplot(data = a, aes(x = t, y = value, col = variable)) + geom_line()

Meine Frage ist einfach: Ist das in diesem Dokument angegebene System von Natur aus instabil und führt zu Ergebnissen, oder habe ich irgendwo einen Fehler gemacht?

Antworten:


6

Explosivität

Das Papier enthält einen Fehler, der die explosive Dynamik in Ihrer Simulation verursacht (obwohl vermutlich die zugrunde liegenden Berechnungen im Papier korrekt waren). Die aus der Eigenwertzerlegung abgeleitete Gleichgewichtsbedingung ist in der dritten Zeile der Matrix auf Seite 12 des Papiers enthalten, wobei die Variablen wie folgt geordnet sind: (ich werde Tildas fallen lassen, also alle Kleinbuchstabenvariablen sind als logarithmische Abweichungen zu verstehen. Vergleich mit Gl. (16) auf p. In 13 sehen wir, dass die Koeffizienten für und umgeschaltet werden, und daher ist die korrekte Bedingung ( c , k , h , z ) k hQ1(c,k,h,z)kh

ct=0.54kt+0.02ht+0.44zt

Simulation

Erstens können wir Verbrauch und Arbeit als lineare Funktion von Zustandsvariablen ausdrücken (das System muss nicht bei jedem Schritt der Simulation gelöst werden). Die intertemporalen und intratemporalen Gleichgewichtsbedingungen können wie folgt geschrieben werden

[10.022.781][ctht]=[0.540.4412.78][ktzt]

Nach dem Multiplizieren mit einem Inversen erhalten wir

[ctht]=[0.530.470.471.47][ktzt]

Als nächstes kann der Übergang für Zustände wie folgt geschrieben werden

[kt+1zt+1]=[0.070.0600][ctht]+[1.010.100.95][ktzt]+[0ϵt+1]

Dies kann durch Ersetzen von Steuervariablen auf reduziert werden

[kt+1zt+1]=[0.940.1600.95][ktzt]+[0ϵt+1]

Jetzt sollte die Simulation trivial sein, hier ein Matlab / Octave-Beispiel:

T = 200;
X = zeros(2,T);
for i=2:T
    X(:,i) = [0.94 0.16; 0 0.95] * X(:,i-1) + [0; 0.007*randn()];
end
Y = [0.53 0.47; -0.47 1.47] * X;
figure
plot(1:T, [X; Y])
legend('k','z','c','h')

Simulation

In der Praxis sollten Sie wahrscheinlich die gesamte Lösung einschließlich der Eigenwertzerlegung neu berechnen, damit Sie Parameter usw. ändern können.


(+1). Vielleicht wäre es hilfreich, Output und Investition grafisch darzustellen, die normalerweise auch im Fokus des Interesses stehen (und zur Validierung des Modells beitragen, wenn die Investitionsserie eine größere Variabilität aufweist als die Output-Serie).
Alecos Papadopoulos

5

Letzte Neuigkeiten 20. März 2015 : Ich habe prof. K. Salyer, einer der Autoren des Benutzerhandbuchs. In einer wiederholten Mitteilung überprüfte er, dass beide Probleme (siehe meine Antwort unten sowie die Antwort von @ivansml) existieren:

a) Die korrekte Gleichung für das Gesetz der Konsumbewegung lautet wie @ivansml zeigt

b) Die Zahl wird im Papier fälschlicherweise als "Varianz" (S. 11) bezeichnet. In Wirklichkeit ist es die Standardabweichung , und tatsächlich ist eine solche Größe ein typischer Befund in den Daten (Prof. Salyer verwies auf "S. 22 aus Kapitel 1 von Cooley und Prescotts Frontiers of Business Cycle Research").0.007

Beide Fehler beziehen sich auf die gedruckte Version des Papiers. Mit anderen Worten, die Simulationen hinter Abbildung 1 des Papiers sind korrekt: Sie verwenden die richtige Gleichung für den Verbrauch und als Standardabweichung der Störung im Technologieprozess. Es ist also das zweite Diagramm darunter, das gültig ist.0.007


PHASE A
Ich habe durch Simulation (und unter Verwendung der richtigen Standardabweichung) überprüft, dass das Modell explodiert, obwohl dies eher nach oben als nach unten geschieht . Es muss einen Rechenfehler in der Arbeit geben, der dennoch irgendwie nicht auf die Simulationen der Autoren "übertragen" wurde. Im Moment fällt mir nichts anderes ein, da die Methodik Standard ist. Ich bin fasziniert und arbeite immer noch daran.

PHASE B
Nach der Antwort von @ ivansml, bei der ein Fehler in der Arbeit festgestellt wurde (der anscheinend nicht in den Simulationen der Autoren gemacht wurde) , habe ich einen zweiten Fehler festgestellt , diesmal in den Simulationen : und es hängt damit zusammen, ob ist eine Standardabweichung oder ein Varianzwert. 0.007

Insbesondere: Unter Verwendung des korrigierten Gleichungssystems und einer zufälligen Störung (dh wie in der Veröffentlichung geschrieben ). Ich die folgende Grafik der letzten 120 Realisierungen von insgesamt 3.000: ϵiN(0,σ2=0.007),SD=0.0837Geben Sie hier die Bildbeschreibung ein

Beachten Sie die Werte auf der vertikalen Achse: Sie sind viel größer als der Wertebereich, der in Abbildung 1 im Artikel der Autoren angegeben ist.

Aber wenn ich Störungen gemäß , dann ich ϵiN(0,σ2=0.00049),SD=0.007Geben Sie hier die Bildbeschreibung ein

Jetzt entspricht der Wertebereich denen im Diagramm des Papiers. Es kann vorkommen, dass die korrekte Varianz beträgt und die Autoren sie fälschlicherweise als StDev verwendet haben. Es kann jedoch auch vorkommen, dass die korrekte Varianz und die korrekte SD beträgt . Die Simulation war also korrekt (in Übereinstimmung mit der erhaltenen Schätzung), aber versehentlich wurde in der Arbeit "Varianz" genannt, was als "Standardabweichung" bezeichnet werden sollte.0,000049 0,0070.0070.0000490.007

Ich werde versuchen, die Autoren in diesen beiden Fragen zu kontaktieren.


Ich habe es geschafft herauszufinden, dass der Prozess tatsächlich explosiv ist, wie Sie betont haben. Ich habe einen Fehler in Bezug auf die Varianz gemacht, Bus, da SD 0,083 ist, was eine noch größere Variation bedeutet, als ich ursprünglich verwendet habe, und der Prozess explodiert viel schneller. Was ich nicht verstehe, wie der Autor es geschafft hat (während er schreibt) 3000 Beobachtungen zu simulieren und die Darstellung stationärer Reihen (am Ende des Papiers) bereitzustellen, während der Prozess diese Eigenschaft nicht aufweist.
Sarunas

@Sarunas Überprüfen Sie Ihren Code wie folgt: Berechnen Sie manuell die ersten zwei bis drei Werte der verschiedenen Prozesse unter Verwendung der tatsächlich erzeugten Schocks und vergleichen Sie sie mit den entsprechenden Werten, die der Code Ihnen gibt.
Alecos Papadopoulos

Ich habe das gemacht. versuchte manuell weiterzumachen. Von erfahrenen Forschern wäre es nützlich zu wissen, warum der Kapitalprozess explosiv sein sollte. Würden wir nicht wollen, dass es stationär ist? Wie könnte sonst ein stationärer Zustand erreicht werden? Ich habe die Eigenwerte des Systems überprüft und wie Sie bereits erwähnt haben, ist das System tatsächlich explosiv, sodass im Code selbst nichts falsch ist. Entweder sind die Fehler in der Zeitung oder ich verstehe die Logik nicht.
Sarunas

Vielen Dank für Ihre Mühe. Du hast mir verdammt noch mal geholfen! Zumindest war es nicht ich, der den Fehler gemacht hat (im Grunde) :)
Sarunas

1
@AlecosPapadopoulos Ich denke, der Kapitalkoeffizient bei linearisierten Ressourcenbeschränkungen kann einen überschreiten (in diesem Modell sollte er tatsächlich ) - was zählt, ist die Stabilität des -Prozesses, sobald alle Gleichgewichtsbeziehungen ersetzt wurden Wenn ich die Matrizen aus dem Papier nehme und sie in Paul Kleins Solab Solver stecke , erhalte ich eine stabile Lösung, also würde ich sagen, dass das Papier nur einen numerischen Tippfehler enthält. (Wenn Sie dies selbst tun, achten Sie auf unterschiedliche Notationen und variable Reihenfolge in Kleins Code)( k t , z t ) A , B.1/β(kt,zt)A,B
ivansml
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.