python - 如何在滚动的基础上从数据帧中获取逆协方差矩阵
问题描述
我有十个不同投资组合的 DataFrame 返回 12904 天。我正在尝试获取每个日期的滚动倒协方差矩阵。我用 .rolling() 函数得到协方差矩阵。不幸的是,取反会产生错误。任何帮助是极大的赞赏!
DataFrame 超额返回(12904 行 × 10 列):
NoDur Durbl Manuf Enrgy HiTec Telcm Shops Hlth Utils Other
Date
1970-01-02 0.0074 0.0188 0.0111 0.0175 0.0069 0.0162 0.0041 -0.0035 0.0159 0.0175
1970-01-05 0.0058 -0.0023 0.0049 0.0099 0.0066 0.0237 -0.0026 -0.0019 0.0122 0.0052
1970-01-06 -0.0032 -0.0135 -0.0085 -0.0107 -0.0050 -0.0002 0.0015 -0.0047 -0.0105 -0.0111
1970-01-07 0.0012 -0.0047 -0.0004 -0.0080 -0.0000 -0.0015 0.0042 0.0007 -0.0038 -0.0012
1970-01-08 -0.0024 -0.0035 0.0021 -0.0034 0.00255 -0.0057 0.0007 0.0062 0.0015 0.0011
我试过的代码:
rolling_cov_inv = np.linalg.inv(excess_return.rolling(750).cov().shift())
我收到的错误:
LinAlgError: Last 2 dimensions of the array must be square
我也试过:
rolling_cov_inv = excess_return.rolling(750).np.linalg.inv(cov()).shift())
这里的错误信息:
'Rolling' object has no attribute 'np'
预期的输出是每天的 10x10 矩阵。
提前谢谢了!
解决方案
我想你快到了。以下代码返回一个系列,其中每个日期对应于 750 个观察期的协方差矩阵:
excess_return.rolling(750).cov().groupby('Date').apply(lambda g: pd.DataFrame(np.linalg.inv(g.values), index=g.index, columns=g.columns))
推荐阅读
- date - 无法将 javascript 日期对象设置为过滤器隐藏的单元格
- java - Collections.sort() 不适用于实现 Comparable 的类或使用 Comparator Java 时
- keras - 为什么 ResNet50 include_top 参数给出错误?
- go - Redis 在 Docker 容器中失去连接
- json - 我们如何在后端压缩 JSON 并在前端解压缩?
- amazon-web-services - AWS Kinesis S3 红移
- dataframe - 将行插入熊猫数据框中
- python - 在 Google Contacts API 调用中获取照片
- php - 我无法在我的个人 html 代码和 php 代码中显示我的朋友列表
- php - 如何基于多用户系统的防护将用户重定向到不同的页面?