使用 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