我已经编写了两块 R 代码。我相信它们都应该做完全相同的事情 - 除了一个使用 for 循环方法而一个使用 sapply 函数。然而,它们产生的结果略有不同。有谁知道是什么导致了这里的细微差别?有趣的是,这两种方法为输出向量的第一个元素生成相同的值。
方法一:
set.seed(967)
n=replicate(1000,200)
ACF2MA=sapply(n, function(n1) {acf(arima.sim(n1, model = list(ma = c(0.4))),plot=FALSE)$acf[3]})
ACF2AR=sapply(n, function(n1) {acf(arima.sim(n1, model = list(ar = c(0.45))),plot=FALSE)$acf[3]})`
方法2:
set.seed(967)
ACF2MA1=1:1000
ACF2AR1=1:1000
for (i in 1:1000){
YMA= arima.sim(n=200, model=list(ma=c(0.4)))
YAR= arima.sim(n=200, model=list(ar=c(0.45)))
ACF2MA1[i]=acf(YMA,plot = FALSE)$acf[3]
ACF2AR1[i]=acf(YAR,plot = FALSE)$acf[3]
}
提前非常感谢!
我期待完全相同的结果。
区别在于您以不同的顺序运行模拟。在随机(伪随机)模拟中,这一点很重要。在
sapply
情况下,您运行 1000 个 MA 模拟,然后运行 1000 个 AR 模拟;在循环中,您交替使用 MA 和 AR 模拟。