我正在为时间序列数据的向量执行自相关过程。我希望为给定的时间序列创建一个由自相关组成的对称矩阵。
我正在使用acf()
函数检查我的值,并返回:
“ acfData”系列的自相关,按时滞
0 1 2 3 4 5 6 7 8 9 10 11 12 13
1.000 -0.038 0.253 0.266 0.250 0.267 -0.182 0.281 -0.013 -0.067 -0.122 -0.115 -0.023 -0.337
然后要获得矩阵,我对数据执行data.frame更改,以使我可以将值滑动指定的滞后时间:
dataF <- data.frame("data" = acfData)
names(dataF)[1] <- "acfData"
dataLag <- slide(dataF, "acfData", slideBy = -1)
提供:
> head(dataLag)
acfData acfData-1
1 -7 NA
2 5 -7
3 4 5
4 -17 4
5 6 -17
6 -10 6
当我只执行cor()
函数时,这将给出正确的2x2矩阵:
> cor(na.omit(dataLag))
acfData acfData-1
acfData 1.00000000 -0.03842146
acfData-1 -0.03842146 1.00000000
但是,将其扩展到第二个时滞矩阵会导致以前的值发生变化。
dataLag <- cbind(dataLag, slide(dataF, "acfData", slideBy = -2)[2])
> head(dataLag)
acfData acfData-1 acfData-2
1 -7 NA NA
2 5 -7 NA
3 4 5 -7
4 -17 4 5
5 6 -17 4
6 -10 6 -17
再次执行cor()
函数会导致:
> cor(na.omit(dataLag))
acfData acfData-1 acfData-2
acfData 1.00000000 -0.03156163 0.27502462
acfData-1 -0.03156163 1.00000000 -0.07361449
acfData-2 0.27502462 -0.07361449 1.00000000
您可以看到1步的滞后数据相关性已更改。我认为这是由于na.omit()
可能由于第二次延迟的介绍而删除了整个前两行,而第二次延迟给了两个NA
,但是我不确定如何在第一次延迟中正确省略它们计算。
答案 0 :(得分:0)
正如本·博克尔(Ben Bolker)在评论中提到的,只需添加“ pairwise.complete.obs”的“ use”参数即可正确省略NA。
该函数的新返回值是:
> cor(dataLag, use="pairwise.complete.obs")
acfData acfData-1 acfData-2
acfData 1.00000000 -0.03842146 0.27502462
acfData-1 -0.03842146 1.00000000 -0.07361449
acfData-2 0.27502462 -0.07361449 1.00000000