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:
où 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.
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 , i et répétez le processus.
Malheureusement, je reçois un processus explosif qui n'a pas de sens:
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?
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
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.
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.
J'essaierai de contacter les auteurs sur ces deux sujets.
la source