滚动平均两两相关在Python中的应用 [英] Rolling average pairwise correlation in Python

查看:0
本文介绍了滚动平均两两相关在Python中的应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我每天从三个市场(GLD、SPY和USO)获得回报。我的目标是在130天的滚动基础上,从相关矩阵计算平均成对相关性。

我的起点是:

import numpy as np
import pandas as pd
import os as os
import pandas.io.data as web
import datetime as datetime
from pandas.io.data import DataReader

stocks = ['spy', 'gld', 'uso']
start = datetime.datetime(2010,1,1)
end = datetime.datetime(2016,1,1)

df = web.DataReader(stocks, 'yahoo', start, end)
adj_close_df = df['Adj Close']

returns = adj_close_df.pct_change(1).dropna()
returns = returns.dropna()

rollingcor = returns.rolling(130).corr()

这将创建一组相关矩阵。然而,提取下面(或上面)的三角形,删除对角线,然后计算每个观测的平均值,这是我画空白的地方。理想情况下,我希望每个日期的输出都在一个系列中,然后我可以按日期对其进行索引。

也许我从错误的地方开始,但任何帮助都将不胜感激。

推荐答案

要获得平均成对相关性,可以求出相关矩阵的和,减去n(对角线上的),除以2(对称),最后除以n(平均值)。我认为这应该可以做到:

>>> n = len(stocks)
>>> ((rollingcor.sum(skipna=0).sum(skipna=0) - n) / 2) / n
Date
2010-01-05         NaN
2010-01-06         NaN
2010-01-07         NaN
                ...   
2015-12-29    0.164356
2015-12-30    0.168102
2015-12-31    0.166462
dtype: float64

这篇关于滚动平均两两相关在Python中的应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆