2

我正在使用 GSL 库 1.14 和 ruby​​ 包装器 ( gsl ) 进行一些数学计算。我需要的一件事是 Pearson 相关性。但是当我的数组中的 0 时出现问题。

例如,我有这段代码:

x = [1,2,2,2,12]
y = [1,2,1,3,33]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> 0.9967291641974002

但是当我尝试使用以下数组值计算它时,我得到一个 NaN:

x = [1,1,1]
y = [1,1,1]
or
x = [0,1,1]
y = [1,1,1]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> NaN

当我尝试使用这个值时,它可以工作:

x = [0,1,1]
y = [1,0,1]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> -0.5

有人知道为什么吗?这很奇怪,不是吗?

4

2 回答 2

2

我不知道 GSL 的实现,但一般来说,皮尔逊相关系数的计算涉及除以两个标准偏差,所以如果其中任何一个为 0,则计算失败。如果所有向量元素都相等,则标准差为 0。您所有失败的示例都有一个具有相同元素的向量。我希望这回答了你的问题。

于 2011-05-02T15:16:36.173 回答
0

从理论上讲,相关性意味着找到两个数据集之间的关系。它可能是正数或负数,具体取决于数据集的模式。但我想传达的是,当您将 0 作为数据集的元素之一时,您无法关联数量 0 与其他数据集的其他非零元素。这就是它给出 NaN 的原因。

于 2012-05-24T04:47:09.693 回答