我的 cov 矩阵和权重位于 2 个独立的数据框中,我想计算投资组合方差(对于每个日期的每个投资组合,为了简单起见,我的示例只有 1 个投资组合和 1 个日期):
weights <- data.frame(Portfolio = c("P1", "P1", "P1"),
Date = c("2008-03-31", "2008-03-31", "2008-03-31"),
ID = c("Asset1", "Asset2", "Asset3"),
Wgt = c(0.1, 0.2, 0.3))
covar <- data.frame(
Date = c("2008-03-31", "2008-03-31", "2008-03-31", "2008-03-31", "2008-03-31", "2008-03-31"),
ID1 = c("Asset1", "Asset2", "Asset3", "Asset2", "Asset3", "Asset3"),
ID2 = c("Asset1", "Asset1", "Asset1", "Asset2", "Asset2", "Asset3"),
cov = c(0.011, 0.012, 0.013, 0.022, 0.032, 0.033)
)
如果我正确理解您的问题,您需要按
Portfolio
和 Date
进行分组,并创建一个新列来计算 Wgt
列的方差。
library(dplyr)
P_Variance <- weights %>%
group_by(Portfolio, Date) %>%
mutate(Var = var(Wgt))
> P_Variance
# A tibble: 3 × 5
# Groups: Portfolio, Date [1]
Portfolio Date ID Wgt Var
<chr> <chr> <chr> <dbl> <dbl>
1 P1 2008-03-31 Asset1 0.1 0.01
2 P1 2008-03-31 Asset2 0.2 0.01
3 P1 2008-03-31 Asset3 0.3 0.01
我希望这有帮助!