相关系数和协方差

来源:互联网 发布:网络用语pc是什么意思 编辑:程序博客网 时间:2024/05/01 23:05
from pandas import Sereis, DataFrameimport pandas.io.data as weball_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(volumedata.corrwith(volume,axis=1)  #传入axis=1可按行进行计算#无论如何,在计算相关系数之前,所有的数据项都会按标签对齐。#如果是计算Series与DataFrame的相关系数则可以使用df.corrwith(serr)

一.协方差

只表示线性相关的方向,取值正无穷到负无穷。
也就是说,协方差为正值,说明一个变量变大另一个变量也变大;取负值说明一个变量变大另一个变量变小,取0说明两个变量没有相关关系。
注意:协方差的绝对值不反映线性相关的程度(其绝对值与变量的取值范围有关系)。

二.相关系数

不仅表示线性相关的方向,还表示线性相关的程度,取值[-1,1]。
也就是说,相关系数为正值,说明一个变量变大另一个变量也变大;取负值说明一个变量变大另一个变量变小,取0说明两个变量没有相关关系。同时,相关系数的绝对值越接近1,线性关系越显著。
通常情况下,当相关系数的绝对值大于2/sqrt(N),N为样本点的数量时,我们认为线性关系是存在的。

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

协方差的公式为 S_{xy}=\sum_i^N \frac{(x_i-\mu_x)(y_i - \mu_y)}{N
相关系数的公式为r = \frac{S_{xy}}{S_x S_y},其中Sx,Sy分别表示x和y的标准差。
由两者的相关关系,可以看出为什么相关系数比协方差多阐述了线性相关的程度:
原因在于协方差和大小和x,y的取值范围紧密相关,举个例子,x,y都取值[-1000,1000]或都取值[-0.001,0.001],这两者的协方差肯定呈现量级般的差异,但是都除以标准差后,相当于在同样的尺度上衡量问题,所以相关系数是有意义的,反映了线性相关的程度。
备注:其实也不一定必须得除以标准差,只要除的值等够度量数据的波动范围就可以了,标准差只是一种通俗惯例的选择。

参考:https://www.zhihu.com/question/20852004

0 0