GSL和相关性

时间:2011-05-02 14:16:50

标签: ruby math gsl

我正在使用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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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