计算滚动协方差时如何降低矩阵的维数?

How to reduce dimensionality of matrix when calculating rolling covariance?

我有 2 列 returns dataframe(一列是比特币 returns 随着时间的推移,一列是一种加密资产的 returns)。我想计算它们之间的滚动 cov,然后计算方差,然后计算滚动 beta 系数。 到最后,测试版应该看起来像 beta and I want to make chart like this rolling beta

cov = df[['Return Market','Return Asset']].rolling(window=3).cov()
cov

var = pd.rolling_var(df['Return Market'], window=3)
var

df['Beta'] = cov / var

当我运行 cov = df[['Return Market','Return Asset']].rolling(window=3).cov()

我明白了 output 并且我无法完成其余代码。我不需要完整的协方差矩阵,我只需要 'Return Market' 和 'Return Asset' 之间的 cov。我想放弃其余的。问题是每个索引都有 2 行。如何解决?

这个错误:TypeError: incompatible index of inserted column with frame index一定是cov输出不正确造成的

请帮我弄清楚。我使用 Python 3.7 和 pandas 版本是 0.22.0

首先,您仍然(与您之前的问题类似)使用 0.17 版的 pandas 功能,并且您安装了 0.22 版。 0.18 版删除了所有 rolling_* 函数。请确保您阅读了 pandas 版本的文档。版本显示在文档的左上角 "pandas 0.23.3 documentation » API Reference »"。这是您需要与 pandas 版本 0.22 一起使用的函数:https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.core.window.Rolling.var.html#pandas.core.window.Rolling.var

为了获得协方差值(而不是完整的协方差矩阵),您需要将第二列作为滚动参数传递:

cov = df[['Return Market']].rolling(window=3).cov(other=df['Return Asset'].rolling(window=3))
var = df['Return Market'].rolling(window=3).var()
beta = (cov['Return Market'] / var).dropna()