r - 创建对称自相关矩阵
问题描述
我正在对时间序列数据向量执行自相关过程。我正在寻找一个由给定时间序列的自相关组成的对称矩阵。
我正在使用该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
s,但我不确定如何在第一个滞后计算中正确省略它们。
解决方案
正如 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
推荐阅读
- python - Appending rows from two separate pandas dataframes onto one dataframe based on certain conditions
- python - AttributeError:模块“tkinter”没有属性“样式”
- kubernetes - The PersistentVolume is invalid: spec: Required value: must specify a volume type
- regex - 翻译 Twig 匹配的工作正则表达式
- spring-cloud - Why isn't Kafka ProducerListener logging trace id and span id?
- rust - 如何在 Rust 工具链之间切换?
- python - 从加密的 PDF 中提取 Python 数据
- awk - 如何控制gawk中浮点数的格式?
- python - 根据满足条件查找两点之间的厚度
- socket.io - 如何在永远运行的套接字 io 服务器中启用调试?