计算具有不同滚动窗口的对角线和非对角线值的协方差矩阵的python方法。Pandas

2024-09-28 22:43:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个每日因素回报的数据框架。我期望的最终结果是获得VcV矩阵,其中方差对角线以1.5年(358天)滚动计算,非对角线协方差值以3年(756天)滚动窗口计算。为了简单起见,我现在对观察结果进行了同等的加权。你知道吗

我的当前函数创建了两个协方差矩阵的多索引数据帧,然后使用for循环将一个对角线替换为另一个对角线。这是可行的;但是,有没有比计算两个多索引数据帧更有效的方法呢?你知道吗

def blendCovarianceMatrix(daily_returns, var_window = 358, cov_window = 756 ):
    varianceMatrix = daily_returns.rolling(int(var_window)).cov()
    covarianceMatrix = daily_returns.rolling(int(cov_window)).cov()
    datelist = covarianceMatrix.dropna().index.get_level_values("DataDate").unique()
    for dates in datelist:
        np.fill_diagonal(covarianceMatrix.loc[dates].values,np.diag(varianceMatrix.loc[dates]))
    return covarianceMatrix, datelist

Tags: 数据forvar矩阵windowcovreturnsdaily