【问题标题】:Covariance of two columns of a dataframe数据框两列的协方差
【发布时间】:2020-11-18 04:15:05
【问题描述】:

如果这个问题听起来太琐碎,请原谅,但我想确保我走在正确的轨道上。 我有一个类似于以下的数据框,我有兴趣了解两个变量 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 这样可以绘制的分布。

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

【问题讨论】:

  • 你是对的。协方差和相关性是从两个值的数组/列表/向量等计算的单个值。相关性通常更有用,因为它是标准化的。如果需要,有无数的网络示例。

标签: python pandas statistics data-analysis covariance


【解决方案1】:

你的看法对吗? - 是的

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

  • 如果它们“表现相似”(这大致意味着变量 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 等级相关性:比我们上面使用的 Pearson 相关系数更稳健;如果您的数据表现出某种非线性,Pearson 基本上只关注线性相关性并产生不太正确的结果;如果您的数据中可能存在非线性关系,您应该选择 Spearman
  • 自相关:考虑一个正弦信号,它触发另一个信号,但时滞为 90º(表示余弦)。在这种情况下,典型的协方差/相关性会告诉您这种关系很弱,并且可能(错误地)使您得出两个信号之间没有因果关系的结论。自相关基本上是时间序列变化版本的相关性,因此可以检测滞后相关性。
  • 可能更多,但也许这是一个好的开始

【讨论】:

  • 感谢您的详细解答。
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2020-01-28
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多