数据框两列的协方差

Covariance of two columns of a dataframe

如果这个问题听起来太琐碎了,请原谅,但我想确定我是在正确的轨道上。 我有一个类似于下图的数据框,我想了解这两个变量 A 和 B 是一起变化还是其他变化。

       A       B
0   34.4534 35.444248
1   34.8915 24.693800
2   0.0000  21.586316
3   34.7767 23.783602

我被要求绘制两者之间的协方差。然而,根据我的研究,协方差似乎是一个单一的计算值,就像平均值和标准差一样,而不是像 pdf/cdf 这样可以绘制的分布。

我对协方差的看法正确吗?对于理解这些变量之间可变性的其他方法,您能给我什么建议?

你的看法对吗? - 是的

协方差是衡量两个随机变量的联合可变性的指标,用一个数字表示。这个数字是

  • 如果它们“表现相似”(这大致意味着变量 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='.')

我们看到 var1var3 似乎是共变的;所以为了计算所有变量之间的协方差,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

从中可以清楚地看出,var1var3 表现出很强的相关性,正如我们预期的那样。


对于了解这些变量之间可变性的其他方法,您能给我什么建议? - 取决于数据

由于我们对您的数据的性质一无所知,因此很难说。也许只是作为一个入门者(不打算详尽无遗),一些关于您可以查看的内容的提示:

  • Spearman's rank correlation:比Pearson相关系数更稳健,我们上面用过的;如果您的数据表现出某种非线性,Pearson 基本上只查看线性相关性并且会产生不太正确的结果;如果您的数据中可能存在非线性关系,您应该选择 Spearman
  • 自相关:考虑一个正弦信号触发另一个信号但有 90º 的时间滞后(表示余弦)。在那种情况下,典型的 covariance/correlation 会告诉你这种关系很弱,并且可能(错误地)让你得出两个信号之间没有因果关系的结论。自相关基本上是时间序列移位版本的相关性,因此可以检测滞后相关性。
  • 可能更多,但也许这是一个好的开始