模拟真实的商业周期


10

基本上,我需要复制Hartley的“解决实际商业周期模型的用户指南”(http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf)。具体来说,我想模拟模型所隐含的动力系统,其指定如下:

在此处输入图片说明

其中是消费,是劳动力供给,是资本,是自回归技术过程,是产出,是投资。ħ ķ ž ÿ chkzyi

我使用以下逻辑对其进行仿真:假设在时间,一切都处于稳定状态,并且所有值均为0,由此得出。然后,在通过给系统造成冲击,我求解和(因为我有“震惊的”并先前获得,然后插入这两个以检索其余部分,即并重复该过程。ķ + 1+ 1 ε ç + 1个 ħ + 1个 ž + 1 ķ + 1个 Ÿ + 1+ 1ķ + 2tkt+1t+1εct+1ht+1zt+1kt+1yt+1,it+1,kt+2

不幸的是,我得到了一个没有意义的爆炸性过程:

在此处输入图片说明

我还包括用于模拟此代码的R代码:

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

我的问题很简单-本文中指定的系统本质上是不稳定的并且会误判结果,还是我在某个地方犯了错误?

Answers:


6

爆炸性

论文中包含一个错误,该错误会导致模拟中爆炸性的动态变化(尽管假定论文中的基础计算是正确的)。从特征值分解得出的平衡条件包含在论文第12页的矩阵的第三行中,其变量按排序(我将丢掉tilda,因此所有小写变量应理解为对数偏差)。与eqn比较。(16)在p。在图13中,我们看到和系数已切换,因此正确的条件是c k h z k hQ1(c,k,h,z)kh

ct=0.54kt+0.02ht+0.44zt

模拟

首先,我们可以将消耗量和劳动量表示为状态变量的线性函数(无需在仿真的每个步骤中求解系统)。时际和时际平衡条件可以写成

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

所以在乘以一个逆后,我们得到

[ctht]=[0.530.470.471.47][ktzt]

接下来,状态的转换可以写成

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

可以通过将控制变量代入

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

现在模拟应该是微不足道的,这是一个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')

模拟

当然,实际上,您可能应该重新计算整个解决方案,包括特征值分解,以便可以更改参数等。


(+1)。也许可以用图表表示产出和投资,这通常也是关注的焦点(并且当投资系列的可变性比产出系列大时,有助于模型的验证)。
Alecos Papadopoulos

5

最终新闻2015年3月20日:我已通过电子邮件发送给教授。K. Salyer,《用户指南》的作者之一。在反复交流中,他验证了两个问题(请参阅下面的我的答案以及@ivansml答案)确实存在:

a)消费运动定律的正确方程式如@ivansml所示

0.007

0.007



通过仿真(并使用正确的标准偏差),我验证了模型A发生爆炸的阶段A,尽管它向上爆炸而不是向下爆炸。本文必须有一个计算上的错误,尽管如此,它还是以某种方式没有“传播”到作者的模拟中。由于该方法是标准方法,因此目前我无法想到其他任何方法。我很感兴趣,因此仍在努力。


0.007

ϵiN(0,σ2=0.007),SD=0.0837在此处输入图片说明

注意垂直轴上的值:它们比作者论文中图1中显示的值范围大得多

ϵiN(0,σ2=0.00049),SD=0.007在此处输入图片说明

0.0070.0000490.007

我将尝试就这两个问题与作者联系。


正如您所指出的,我设法弄清楚该过程实际上是爆炸性的。我确实对方差弄错了,因为sd为0.083,所以这意味着比我最初使用的偏差还要大,并且过程爆炸得更快。我不知道作者是如何模拟(如他所写的)3000个观测值并提供平稳序列的图(在本文末尾),而过程却没有表现出这种特性。
Sarunas

@Sarunas如下检查您的代码:使用实际生成的冲击手动计算各个过程的前两三个值,并与代码给您的相应值进行比较。
Alecos Papadopoulos'3

我做到了 尝试手动进行。从经验丰富的研究人员那里知道的有用之处在于,为什么资本过程会爆炸性?我们不希望它静止不动吗?否则如何达到稳态?我检查了系统的特征值,正如您之前指出的那样-系统实际上是爆炸性的,因此代码本身没有错。错误出在纸上,或者我不理解逻辑。
Sarunas 2015年

多谢您的努力。你帮助了我!至少,不是我犯了这个错误(根本上):)
Sarunas

1
1/β(kt,zt)A,B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.