R 模拟时间序列

R 模拟时间序列,r,time-series,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) 然而,这三种方法给出了不同的结果。我想知道这是为什么,恐怕我不懂一些基本的东西。arima.sim有一个“磨合”期以达到平稳性。参数n.start设置此时段的长度,它必须具有长度ar+ma。对

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

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)

然而,这三种方法给出了不同的结果。我想知道这是为什么,恐怕我不懂一些基本的东西。

arima.sim
有一个“磨合”期以达到平稳性。参数
n.start
设置此时段的长度,它必须具有长度
ar
+
ma
。对于
AR(1)
进程,
n.start
必须至少为1。注意,如果您没有指定
n.start
arima.sim
将自动为您计算一个合理的

给定
n.start
(指定的一个或自动计算的一个),
arima.sim
然后随机抽样
n.start
用于“老化”的创新。这是正确的,因为这是一个随机过程,您将从一次运行到另一次运行得到不同的结果:

## 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
现在,将最后一个
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

是的,我同意前两种方法必须导致不同的结果。但是,这三种方法都没有给出y[5]==5.648,即练习中给出的解。@Khashaa:是(解被四舍五入为三个数字)?你是怎么做到的?你的第一个方法有打字错误。在一行中检查
et[i]
terms
Reduce(函数(x,e){3+0.55*x+e},et[2:6],init=0,accumulate=TRUE)
。这非常有用。这并没有达到我想要的结果(5.648),但现在我明白了原因:第一个元素被设置为et[1],这对我来说很有意义,但不是讲师所做的。@KarstenW<代码>e
arima.sim(list(order=c(1,0,0), ar=0.55), n=6, innov=head(et,6)+3)
## 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
## 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
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
y <- y + 3