Simuler un cycle économique réel

10

Fondamentalement, je dois répliquer le «Guide de l'utilisateur pour résoudre des modèles de cycle économique réels» de Hartley ( http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf ). Plus précisément, je veux simuler le système dynamique impliqué par le modèle qui est spécifié comme suit:

entrez la description de l'image ici

est la consommation, h est l'offre de travail, k est le capital, z est le processus technologique autorégressif, y est la production et i est l'investissement.chkzyje

Je le simule en utilisant la logique suivante: disons au temps , tout est à l'état stationnaire et toutes les valeurs sont 0, d'où nous avons k t + 1 . Ensuite, à t + 1 en donnant un choc au système par ε , je résous pour c t + 1 et h t + 1 (comme j'ai le «choqué» z t + 1 et obtenu précédemment k t + 1. Ensuite, Je branche ces deux pour récupérer le reste, à savoir - y t + 1 , itkt+1t+1εct+1ht+1zt+1kt+1 et répétez le processus.yt+1,jet+1,kt+2

Malheureusement, je reçois un processus explosif qui n'a pas de sens:

entrez la description de l'image ici

J'inclus également le code R utilisé pour simuler ceci:

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()

Sy ma question est simple - le système spécifié dans le document est-il intrinsèquement instable et ergo les résultats, ou ai-je fait une erreur quelque part?

Sarunas
la source

Réponses:

6

Explosivité

Q-1(c,k,h,z)kh

ct=0,54kt+0,02ht+0,44zt

Simulation

Tout d'abord, nous pouvons exprimer la consommation et le travail en fonction linéaire des variables d'état (pas besoin de résoudre le système à chaque étape de la simulation). Les conditions d'équilibre intertemporel et intratemporel peuvent s'écrire

[1-0,022,781][ctht]=[0,540,4412,78][ktzt]

donc après avoir multiplié par un inverse, nous obtenons

[ctht]=[0,530,47-0,471,47][ktzt]

Ensuite, la transition pour les états peut s'écrire

[kt+1zt+1]=[-0,070,0600][ctht]+[1.010,100,95][ktzt]+[0ϵt+1]

qui peut être réduit en substituant les variables de contrôle à

[kt+1zt+1]=[0,940,1600,95][ktzt]+[0ϵt+1]

Maintenant, la simulation devrait être triviale, voici un exemple Matlab / Octave:

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

Bien sûr, dans la pratique, vous devriez probablement recalculer la solution entière, y compris la décomposition des valeurs propres, afin de pouvoir modifier les paramètres, etc.

ivansml
la source
(+1). Il serait peut-être utile de représenter graphiquement la production et l'investissement, qui sont généralement également au centre de l'intérêt (et contribuent à valider le modèle, lorsque la série d'investissement présente une plus grande variabilité que la série de production).
Alecos Papadopoulos
5

NOUVELLES FINALES 20 mars 2015 : J'ai envoyé un e-mail au prof. K. Salyer, l'un des auteurs du Guide de l'utilisateur. Dans une communication répétée, il a vérifié que les deux problèmes (voir ma réponse ci-dessous, ainsi que la réponse @ivansml), existent:

a) L'équation correcte pour la loi du mouvement de consommation est comme le montre @ivansml

0,007

0,007


PHASE A
J'ai vérifié par simulation (et en utilisant l'écart type correct) que le modèle explose, bien qu'il le fasse vers le haut plutôt que vers le bas. Il doit y avoir une erreur de calcul dans l'article, qui n'a cependant pas été "transmise" en quelque sorte aux simulations des auteurs. Pour le moment, je ne peux penser à rien d'autre, car la méthodologie est standard. Je suis intrigué et je travaille donc toujours dessus.


0,007

ϵjeN(0,σ2=0,007),S=0,0837entrez la description de l'image ici

Notez les valeurs sur l'axe vertical: elles sont beaucoup plus grandes que la plage de valeurs qui apparaît sur la figure 1 de l'article des auteurs.

ϵjeN(0,σ2=0,00049),S=0,007entrez la description de l'image ici

0,0070,0000490,007

J'essaierai de contacter les auteurs sur ces deux sujets.

Alecos Papadopoulos
la source
j'ai réussi à comprendre que le processus est en fait explosif comme vous l'avez souligné. J'ai fait une erreur sur la variance, car sd est 0,083, ce qui signifie une variation encore plus importante que celle utilisée initialement et le processus explose beaucoup plus rapidement. ce que je ne comprends pas comment l'auteur a réussi à simuler (comme il l'écrit) 3000 observations et à fournir l'intrigue de séries stationnaires (à la fin de l'article) alors que le processus ne présente pas cette propriété.
Sarunas
@Sarunas Vérifiez votre code comme suit: calculez manuellement les deux ou trois premières valeurs des différents processus, en utilisant les chocs réellement générés, et comparez avec les valeurs correspondantes que le code vous donne.
Alecos Papadopoulos
Je l'ai fait. essayé de passer manuellement. ce qu'il serait utile de savoir de la part de chercheurs plus expérimentés, c'est pourquoi le processus d'investissement serait explosif? ne voudrions-nous pas qu'il soit stationnaire? comment, autrement, un état d'équilibre pourrait être atteint? j'ai vérifié les valeurs propres du système et comme vous l'avez souligné plus tôt - le système est en fait explosif donc il n'y a rien de mal dans le code lui-même. soit les erreurs sont dans le papier, soit je ne comprends pas la logique.
Sarunas
merci beaucoup pour vos efforts. tu m'as bien aidé! du moins, ce n'est pas moi qui ai fait l'erreur (fondamentalement) :)
Sarunas
1
1/β(kt,zt)UNE,B