2017-02-19 16 views
0

我对python很陌生,实际上这是我在Python中的第一个代码。 我试图找到的协方差矩阵为4行数据的具有减小的重量日期明智如何找到Excel行的加权协方差矩阵?

我需要计算每个元件的4乘4的协方差矩阵 我必须使用其中i已计算出的回报蟒和权重 来找到协方差矩阵。

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要么

回答

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']] 
+0

嗨我怎么使用这里的权重呢?对excel的计算是公式sumproduct(SPX(所有行)* SPX(所有行)*权重(所有行)) –

+0

这是否有帮助? http://stackoverflow.com/questions/38448579/weighted-covariance-matrix-in-numpy – protoculture