您的位置:首页 > 其它

相关系数和协方差

2016-11-11 23:32 267 查看
from pandas import Sereis, DataFrame
import pandas.io.data as web

all_data = {}
for ticker in ['AAPL','IBM','MSFT','GOOG']:
all_data[ticker] = web.get_data_yahoo(ticker,'1/1/2000','1/1/2010')

price = DataFrame({tic:data['Adj Close'] for tic,data in all_data.iteritems()})
volume = DataFrame({tic:data['Volume'] for tic,data in all_data.iteritems()})

data = price.pct_change()
#data.tail()

data.MSFT.corr(data.IBM) #Series中的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值得相关系数。与此类似,cov用于计算协方差。
data['GOOG'].corr(data['IBM'])
data.MSFT.cov(data.IBM)

#DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵:
data.corr()
data.cov()

#利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数,传入一个Series将会返回一个相关系数值Series(针对各列进行计算)
data.corrwith(data.IBM)

#传入一个DataFrame则会计算按列名配对的相关系数。
data.corrwith(volume)
data.corrwith(volume,axis=1)  #传入axis=1可按行进行计算

#无论如何,在计算相关系数之前,所有的数据项都会按标签对齐。
#如果是计算Series与DataFrame的相关系数则可以使用df.corrwith(serr)


一.协方差

只表示线性相关的方向,取值正无穷到负无穷。

也就是说,协方差为正值,说明一个变量变大另一个变量也变大;取负值说明一个变量变大另一个变量变小,取0说明两个变量没有相关关系。

注意:协方差的绝对值不反映线性相关的程度(其绝对值与变量的取值范围有关系)。

二.相关系数

不仅表示线性相关的方向,还表示线性相关的程度,取值[-1,1]。

也就是说,相关系数为正值,说明一个变量变大另一个变量也变大;取负值说明一个变量变大另一个变量变小,取0说明两个变量没有相关关系。同时,相关系数的绝对值越接近1,线性关系越显著。

通常情况下,当相关系数的绝对值大于2/sqrt(N),N为样本点的数量时,我们认为线性关系是存在的。

三.协方差与相关系数的关系

协方差的公式为


相关系数的公式为

,其中Sx,Sy分别表示x和y的标准差。

由两者的相关关系,可以看出为什么相关系数比协方差多阐述了线性相关的程度:

原因在于协方差和大小和x,y的取值范围紧密相关,举个例子,x,y都取值[-1000,1000]或都取值[-0.001,0.001],这两者的协方差肯定呈现量级般的差异,但是都除以标准差后,相当于在同样的尺度上衡量问题,所以相关系数是有意义的,反映了线性相关的程度。

备注:其实也不一定必须得除以标准差,只要除的值等够度量数据的波动范围就可以了,标准差只是一种通俗惯例的选择。

参考:https://www.zhihu.com/question/20852004
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: