使用 R 的高频数据的多重协方差矩阵

Posted

技术标签:

【中文标题】使用 R 的高频数据的多重协方差矩阵【英文标题】:Mutiple covariance matrix with high-frecuency data using R 【发布时间】:2020-02-12 17:32:21 【问题描述】:

我正在处理包含 200 万个观测值的高频数据。现在,我需要计算每日的已实现协方差矩阵,定义为:

设 为日内 价格向量, 为日内价格数量

我的数据结构如下:

Year Month Day FivMin   A   B   C   D
2000   1    1    1      1   2   3   4
2000   1    1    2      2   3   0   1
2000   1    1    3      3   4   1   2
2000   1    1    4      0   1   2   3
2000   1    2    1      1   2   3   4
2000   1    2    2      5   3   4   1
2000   1    2    3      3   0   1   2
2000   1    2    4      4   1   9   3
2000   1    3    1      1   2   3   4
2000   1    3    2      0   1   7   1
2000   1    3    3      3   4   1   2
2000   1    3    4      1   -2   2   3
2000   1    4    1      0   2   3   4
2000   1    4    2      2   1   4   1
2000   1    4    3      3   0   1   2
2000   1    4    4      0   2   2   3
2000   1    5    1      1   2   3   4
2000   1    5    2      2   3   4   1
2000   1    5    3      0   -1   1   2
2000   1    5    4      9   1   2   3

变量 A、B、C 和 D 代表每五分钟记录一次的价格。所以我的第一个想法是使用group_by 和变量年、月和日来创建 矩阵。在此之后,我需要计算每天的 Realized Cov。

例如,第一天我实现的 Cov 将是:

这个操作必须每天重复。我不知道是否有解决此问题的软件包。也许,最好使用循环。

谢谢你帮助我。

【问题讨论】:

你能把 dput 命令放到你的数据框里吗?这样任何人都可以复制您的数据并帮助您。像 dput(df)。复制并粘贴输出 我不熟悉已实现协方差的计算 - 您能否提供定义(或解释您如何计算表中的值)? 【参考方案1】:

这是使用 split(用于分组)+tcrossprod(用于 cov 矩阵)的基本 R 解决方案

res <- lapply(split(df,df[c("Year","Month","Day")]), 
              function(x) tcrossprod(t(x[c("A","B","C","D")])))

这样

> res
$`2000.1.1`
   A  B  C  D
A 14 20  6 12
B 20 30 12 22
C  6 12 14 20
D 12 22 20 30

$`2000.1.2`
   A  B   C  D
A 51 21  62 27
B 21 14  27 14
C 62 27 107 45
D 27 14  45 30

$`2000.1.3`
   A  B  C  D
A 11 12  8 13
B 12 25 13 11
C  8 13 63 27
D 13 11 27 30

$`2000.1.4`
   A  B  C  D
A 13  2 11  8
B  2  9 14 15
C 11 14 30 24
D  8 15 24 30

$`2000.1.5`
   A  B  C  D
A 86 17 29 33
B 17 15 19 12
C 29 19 30 24
D 33 12 24 30

数据

df <- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 
2000L, 2000L, 2000L, 2000L, 2000L), Month = c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), Day = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 
4L, 4L, 4L, 5L, 5L, 5L, 5L), FivMin = c(1L, 2L, 3L, 4L, 1L, 2L, 
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), A = c(1L, 
2L, 3L, 0L, 1L, 5L, 3L, 4L, 1L, 0L, 3L, 1L, 0L, 2L, 3L, 0L, 1L, 
2L, 0L, 9L), B = c(2L, 3L, 4L, 1L, 2L, 3L, 0L, 1L, 2L, 1L, 4L, 
-2L, 2L, 1L, 0L, 2L, 2L, 3L, -1L, 1L), C = c(3L, 0L, 1L, 2L, 
3L, 4L, 1L, 9L, 3L, 7L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L
), D = c(4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 
1L, 2L, 3L, 4L, 1L, 2L, 3L)), class = "data.frame", row.names = c(NA, 
-20L))

【讨论】:

以上是关于使用 R 的高频数据的多重协方差矩阵的主要内容,如果未能解决你的问题,请参考以下文章

使用 R copula 包拟合 copula 时估计相关(协方差)矩阵

怎么求协方差矩阵啊,R,matlab,或者excel都可以。

R语言使用cov函数计算矩阵或者dataframe数据变量之间的协方差cor函数计算相关性cor函数通过method参数指定相关性相关性计算方法Pearson,Spearman, Kendall

R语言使用cov函数计算矩阵或者dataframe数据变量之间的协方差cor函数计算相关性cor函数通过method参数指定相关性相关性计算方法Pearson,Spearman, Kendall

PyMC - 方差-协方差矩阵估计

matlab中已知协方差矩阵,怎样算相关系数?