使用arima.sim()进行AR(2)模拟

时间:2017-06-26 11:58:09

标签: r time-series simulation

我想了解arima.sim的工作原理。我模拟了AR(2)过程并手动计算了值。如果我指定2个开始创新,那么很清楚arima.sim如何计算第三个值并开启。但我不清楚该函数如何计算前两个值。这是一个最小的工作示例。

Phi<-c(0.2,0.5)
n.start<-length(Phi)
model<-list(ar=Phi)
n<-10
start.innov<-c(1,4)
set.seed(1121)
innov<-rnorm(n=10)
arsim12<-arima.sim(model=model,n.start=n.start,n=n,start.innov=start.innov,innov=innov)

很清楚如何计算第三次观察(以及第四次和第五次观察......)

arsim12[3]
[1] 1.462733
sum(rev(Phi)*arsim12[1:2])+innov[3]
[1] 1.462733

我希望时间序列中的第一个观察结果可以类似地计算,基于start.innov:

sum(rev(Phi)*start.innov)+innov[1]
[1] 1.444958

但这与第一次观察不同:

arsim12[1]
[1] 1.484958

任何见解?

1 个答案:

答案 0 :(得分:1)

时间序列如下生成:

e <- c(start.innov, innov)
x <- filter(e, Phi, "recursive")

然后删除第一个n.start值。

x满足:

x[i] = Phi[1] * x[i - 1] + Phi[2] * x[i - 2] + e[i]

是的,这只是标准的AR(2),但如果x[i - 1]x[i]被索引为负数或零,则它们给出0(最初NA为越界索引但是重新编码为0 )。通过这种方式,我们看到了

x[1] = e[1] = 1
x[2] = Phi[1] * x[1] + e[2] = 4.2
x[3] = Phi[1] * x[2] + Phi[2] * x[1] + e[3] =  1.484958
......

最后:

arsim12 <- x[3:12]

作为比较,您的计算是假设MA(2)的第一个值,而不是AR(2)

x[3] = Phi[1] * e[2] + Phi[2] * e[1] + e[3] = 1.444958