你的看法对吗? - 是的
协方差是衡量两个随机变量的联合可变性,用一个数字表示。这个数字是
-
正如果它们“表现相似”(这大致意味着变量 1 中的正峰与变量 2 中的正峰重合)
-
零如果它们不共同变化
-
负,如果它们“表现相似”但具有反向关系(即负峰与正峰对齐,反之亦然)
import pandas as pd
# create 3 random variables; var 3 is based on var 1, so they should covary
data = np.random.randint(-9,9,size=(20,3))
data[:,2] = data[:,0] + data[:,2]*0.5
df = pd.DataFrame(data,columns=['var1','var2','var3'])
df.plot(marker='.')
我们看到var1 和var3 似乎有共同点;所以为了计算所有变量之间的协方差,pandas 就派上用场了:
>>> df.cov()
var1 var2 var3
var1 31.326316 -5.389474 30.684211
var2 -5.389474 21.502632 -10.907895
var3 30.684211 -10.907895 37.776316
由于协方差的实际值取决于输入变量的比例,因此您通常通过相应的标准差对协方差进行归一化,从而将相关性作为协方差的度量,范围从 -1(反相关)到 1(相关)。使用 pandas 时,会这样写
>>> df.corr()
var1 var2 var3
var1 1.000000 -0.207657 0.891971
var2 -0.207657 1.000000 -0.382724
var3 0.891971 -0.382724 1.000000
从中可以清楚地看出,var1 和 var3 表现出很强的相关性,正如我们所期望的那样。
对于了解这些变量之间的可变性的其他方法,您能给我什么建议? - 取决于数据
由于我们对您数据的性质一无所知,因此很难说。也许只是作为一个初学者(不打算详尽无遗),一些你可以看的提示:
-
Spearman 等级相关性:比我们上面使用的 Pearson 相关系数更稳健;如果您的数据表现出某种非线性,Pearson 基本上只关注线性相关性并产生不太正确的结果;如果您的数据中可能存在非线性关系,您应该选择 Spearman
-
自相关:考虑一个正弦信号,它触发另一个信号,但时滞为 90º(表示余弦)。在这种情况下,典型的协方差/相关性会告诉您这种关系很弱,并且可能(错误地)使您得出两个信号之间没有因果关系的结论。自相关基本上是时间序列变化版本的相关性,因此可以检测滞后相关性。
- 可能更多,但也许这是一个好的开始