AR(2) 模拟 arima.sim()

AR(2) simulation with arima.sim()

我正在尝试了解 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

有什么见解吗?

时间序列是这样生成的:

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