我想了解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
任何见解?
答案 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