我有一个这样的面板数据框
date firms return mkreturn
5/1/1988 A 5 4
6/1/1988 A 6 6
7/1/1988 A 4 12
8/1/1988 A 5 3
9/1/1988 A 6 12
11/1/1988 A 6 14
12/1/1988 A 12 5
13/01/1988 A 3 6
14/01/1988 A 2 4
15/01/1988 A 5 5
16/01/1988 A 2 6
18/01/1988 A 7 6
19/01/1988 A 3 2
20/01/1988 A 5 7
21/01/1988 A 7 2
22/01/1988 A 5 5
23/01/1988 A 9 7
25/01/1988 A 1 5
26/01/1988 A 5 6
27/01/1988 A 2 6
28/01/1988 A 7 12
29/01/1988 A 2 3
5/1/1988 B 5 2
6/1/1988 B 7 5
7/1/1988 B 5 5
8/1/1988 B 9 7
9/1/1988 B 1 5
11/1/1988 B 5 6
12/1/1988 B 2 12
13/01/1988 B 7 6
14/01/1988 B 2 11
15/01/1988 B 5 2
16/01/1988 B 6 14
18/01/1988 B 8 12
19/01/1988 B 5 15
20/01/1988 B 4 8
21/01/1988 B 3 9
22/01/1988 B 18 10
23/01/1988 B 5 3
25/01/1988 B 2 5
26/01/1988 B 7 6
27/01/1988 B 3 8
28/01/1988 B 9 5
29/01/1988 B 2 3
我想找出每个公司的收益与市场收益的每月协方差。因此,预期的输出就像
date Firms cov(return, mkreturn)
Jan-88 A ....
Jan-88 B ....
我使用以下公式找出月度差异
df_var<-aggregate( return ~ Month+Year+firms, df , var )
如何修改此公式以找出协方差?请在这方面帮助我。
最佳答案
我们将'date'转换为Date
类,在format
步骤中将其'group_by
'转换为'month-year'格式,并与'firms'一起应用cov
library(dplyr)
library(lubridate)
df %>%
group_by(date = format(dmy(date), '%b-%y'), firms) %>%
summarise(cov = cov(return, mkreturn))
或
data.table
的类似选项library(data.table)
setDT(df)[, .(cov = cov(return, mkreturn)),
.(date = format(as.Date(date, '%d/%m/%Y'), '%b-%y'), firms)]
# date firms cov
#1: Jan-88 A 1.727273
#2: Jan-88 B 1.653680
或使用
base R
使用split
lst1 <- split(df, list(df$firms, format(as.Date(df$date, '%d/%m/%Y'),
'%b-%y')), drop = TRUE)
sapply(lst1, function(x) cov(x$return, x$mkreturn))
关于r - 面板数据中的每月协方差计算-r,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53994449/