创建对称自相关矩阵

Posted

技术标签:

【中文标题】创建对称自相关矩阵【英文标题】:Creating symmetric autocorrelation matrix 【发布时间】:2019-07-14 06:32:06 【问题描述】:

我正在对时间序列数据向量执行自相关过程。我希望为给定的时间序列创建一个由自相关组成的对称矩阵。

我正在使用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() 可能会删除整个前两行,因为第二个滞后的介绍给出了两个NAs,但我不确定如何在第一个滞后计算中正确省略它们。

【问题讨论】:

也许可以试试cor(dataLag,use="pairwise.complete.obs") ? 您可能需要考虑 ccf 函数 - 请参阅 ?ccf 嗨,本,效果很好。我将附上一个答案,为未来的用户展示最终结果。 【参考方案1】:

正如 Ben Bolker 在 cmets 中提到的,只需添加“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

【讨论】:

以上是关于创建对称自相关矩阵的主要内容,如果未能解决你的问题,请参考以下文章

使用数组填充对称矩阵

《本科-线性代数笔记-精简汇总》,纯手工!

在 Numpy 中检查矩阵是不是对称

是否可以只保存对称矩阵的一半来节省内存?

什么是共轭矩阵?

数据结构-矩阵矩阵的相关公式推导