模拟时间序列

时间:2016-12-01 23:19:08

标签: r time-series

在最近的宏观经济预测在线课程中,有一个模型的练习

y(t) = 3.0 + 0.55 y(t-1) + e(t)

其中e(t)定义为

et <- c(-1.2138662, -0.2854597, 0.5902700, 0.8285463, -0.9954260, -0.3716332)

现在我尝试在R中进行此操作(该课程使用了EViews),但是我没有找到给出的解决方案:第5个元素的5.648。 我尝试过(类似于blogpost):

y <- rep(NA,6)
y[1] <- 0
y[2] <- 3 + 0.55*y[1]+et[1]
y[3] <- 3 + 0.55*y[2]+et[2]
y[4] <- 3 + 0.55*y[3]+et[3]
y[5] <- 3 + 0.55*y[4]+et[4]
y[6] <- 3 + 0.55*y[5]+et[5]

然后

y <- rep(NA,6)
y[1] <- et[1]
y[2] <- 3 + 0.55*y[1]+et[2]
y[3] <- 3 + 0.55*y[2]+et[3]
y[4] <- 3 + 0.55*y[3]+et[4]
y[5] <- 3 + 0.55*y[4]+et[5]
y[6] <- 3 + 0.55*y[5]+et[6]

然后

arima.sim(list(order=c(1,0,0), ar=0.55), n=6, innov=head(et,6)+3)

然而,所有三种方法都给出了不同的结果。我想知道为什么会这样,我恐怕我不明白基本的东西。

1 个答案:

答案 0 :(得分:1)

arima.sim有一个&#34;老化&#34;期间以达到平稳。参数n.start设置此期间的长度,且长度必须为ar + ma。对于AR(1)流程,n.start必须至少为1.请注意,如果您未指定n.startarima.sim将自动为您计算合理的流程。

鉴于n.start(指定的一个或自动计算的一个),arima.sim然后随机抽样n.start创新&#34;老化&#34;。这是正确的,因为这个随机程序,你会得到不同的结果从一次运行到另一次:

## innovations of length 6
et <- c(-1.2138662, -0.2854597, 0.5902700, 0.8285463, -0.9954260, -0.3716332)

set.seed(0)
arima.sim(list(order = c(1,0,0), ar = 0.55), n = 6, innov = et, n.start = 1)
#[1] -0.5192413 -0.5710424  0.2761967  0.9804545 -0.4561760 -0.6225300

set.seed(1)
arima.sim(list(order = c(1,0,0), ar = 0.55), n = 6, innov = et, n.start = 1)
# [1] -1.55841580 -1.14258839 -0.03815361  0.80756181 -0.55126700 -0.67483005

我们可以通过使用start.innov参数提供一组启动创新来消除这种随机性。请注意,此向量的长度必须为n.start

## fixing starting innovation at 0; i.e., `y[0] = 0`, so `y[1] = et[1]`.
arima.sim(list(order = c(1,0,0), ar = 0.55), n = 6, innov = et, n.start = 1,
          start.innov = 0)
# [1] -1.21386620 -0.95308611  0.06607264  0.86488625 -0.51973856 -0.65748941

现在,将最后arima.sim与以下内容进行比较:

y <- rep(NA, 6)
y[1] <- et[1]
y[2] <- 0.55 * y[1] + et[2]
y[3] <- 0.55 * y[2] + et[3]
y[4] <- 0.55 * y[3] + et[4]
y[5] <- 0.55 * y[4] + et[5]
y[6] <- 0.55 * y[5] + et[6]

# [1] -1.21386620 -0.95308611  0.06607264  0.86488625 -0.51973856 -0.65748941

我们拥有完全可重现的一切。

以上产生零均值时间序列;如果你想要3的平均值,请自己将结果移动+3

y <- y + 3