2011-05-02 41 views
2

我正在使用GSL庫1.14和紅寶石包裝(gsl)進行一些數學計算。我需要的是皮爾遜相關。但是當我的數組中有0時,我遇到了一個問題。GSL和關聯

比如我有這樣的代碼片段:

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 

但是當我嘗試用下面的數組值來計算的話,我得到一個楠:

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

我不知道GSL的實現,但一般來說,Pearson相關係數的計算包括將兩個標準偏差相除,所以如果它們中的任何一個爲0,則計算失敗。如果所有矢量元素相等,則標準偏差爲0。所有失敗的例子都有一個具有相同元素的向量。我希望這回答了你的問題。

+0

thx爲您的答案。你是對的,我想我可以把它解釋爲非線性依賴。 – 23tux 2011-05-02 15:45:41

0

理論上相關意味着找到兩個數據集之間的關係。根據數據集的模式,它可能是正數或負數。但是我想傳達的是當數據集中有0個元素時,您不能將數量0與其他數據集中的其他非零元素相關聯,這就是爲什麼它給出NaN。