我是python的新手,实际上这是我在python中的第一个代码。 我试图找到4行数据的协方差矩阵,每个元素的日期权重递减
我需要计算4乘4的协方差矩阵 我必须使用python,我已经计算了回报和权重 找到协方差矩阵。
import pandas as pd
import numpy as np
import math
xl = pd.ExcelFile('path+file.xlsx')
df = xl.parse('Sheet 1')
df['spxr']=np.log(df.SPX/df.SPX.shift(-1))
df['djir']=np.log(df.DJI/df.DJI.shift(-1))
df['vixr']=np.log(df.VIX/df.VIX.shift(-1))
df['vxdr']=np.log(df.VXD/df.VXD.shift(-1))
df['weights']=(0.06)*(0.94**(df.Obs-1))
df=df.fillna(0)
我不确定如何使用np.cov
答案 0 :(得分:1)
numpy cov将数组作为输入并输出数组。应该这么简单:
import numpy as np
SPX = [0.000174, 0.000170, -0.000985, -0.000906]
DJI = [0.000170, 0.000175, -0.000944, -0.000887]
VIX = [-0.000985, -0.000944, 0.006568, 0.005917]
VXD = [-0.000906, -0.000887, 0.005917, 0.005573]
arr = np.array([SPX,DJI,VIX,VXD])
np.cov(arr)
>>>array([[ 4.17311583e-07, 4.06027167e-07, -2.69320633e-06,
-2.47850075e-06],
[ 4.06027167e-07, 3.95127000e-07, -2.61988900e-06,
-2.41190283e-06],
[ -2.69320633e-06, -2.61988900e-06, 1.73845300e-05,
1.59925507e-05],
[ -2.47850075e-06, -2.41190283e-06, 1.59925507e-05,
1.47229569e-05]])
或者,使用数据框:
import pandas as pd
df = pd.DataFrame(arr, columns=['SPX','DJI','VIX','VXD'])
np.cov(df)
>>>array([[ 4.17311583e-07, 4.06027167e-07, -2.69320633e-06,
-2.47850075e-06],
[ 4.06027167e-07, 3.95127000e-07, -2.61988900e-06,
-2.41190283e-06],
[ -2.69320633e-06, -2.61988900e-06, 1.73845300e-05,
1.59925507e-05],
[ -2.47850075e-06, -2.41190283e-06, 1.59925507e-05,
1.47229569e-05]])
您的数据框中可能包含不相关的列,在这种情况下,您可以将其分割为:
df_relevant = df.iloc[:,['spxr','djir','vixr','vxdr']]