【问题标题】:Why np.corrcoef is not working as expected with two vectors of dimension two?为什么 np.corrcoef 不能按预期使用两个二维向量?
【发布时间】:2021-10-04 09:37:17
【问题描述】:

我正在尝试使用np.corrcoef 计算二维中两个向量之间的 Pearson 相关系数。当向量的维度不同于两个时,它们可以正常工作,例如:

import numpy as np
x = np.random.uniform(-10, 10, 3)
y = np.random.uniform(-10, 10, 3)
print(x, y)
print(np.corrcoef(x,y))

输出:

[-6.59840638 -1.81100446  5.6158669 ] [ 6.7200348  -7.0373677  -2.11395157]
[[ 1.         -0.53299763]
 [-0.53299763  1.        ]]

但是,当维度正好是两个时,唯一值1-1 的相关性是错误的:

import numpy as np
x = np.random.uniform(-10, 10, 2)
y = np.random.uniform(-10, 10, 2)
print(x, y)
print(np.corrcoef(x,y))

输出 1:

[-2.61268708  8.32602293] [6.42020314 3.43806504]
[[ 1. -1.]
 [-1.  1.]]

输出 2:

[ 5.04249697 -3.6599369 ] [6.12936665 3.15827974]
[[1. 1.]
 [1. 1.]]

输出 3:

[7.33503682 7.7145613 ] [-9.54304108  7.43840944]
[[1. 1.]
 [1. 1.]]

问题:发生了什么以及如何解决?

【问题讨论】:

  • 为什么相关性是错误的
  • @Luke 相关性应该是-1和1之间的浮点数,如果向量不相反,则不能是-1。
  • 如果两个变量之间的相关性为-11,则表示它们完全相关,但方向相反
  • 但这在这种情况下是不可能的,因为向量是随机的而不是相反的(在示例中:[-2.61268708 8.32602293] [6.42020314 3.43806504])。
  • 你认为在这种情况下会有什么相关性?

标签: python numpy pearson-correlation


【解决方案1】:

有几个误解导致你的困惑:

我将使用行主要顺序作为 numpy “x 的每一行代表一个变量,每一列代表所有这些变量的单个观察值。”

  • Pearson 相关系数描述了 2 个变量之间的线性关系。如果每个值只有 2 个值。您始终可以在 2 之间创建线性关系。通过标准化,您将始终得到 1 或 -1。

  • 通常在随机向量 X=(X1,....,Xn).T 的分量之间计算协方差或相关矩阵。当你说你想要两个向量之间的相关性时,不清楚你是否想要 X 和 Y 之间的互相关,在这种情况下你需要np.correlate

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多