2014-11-20 103 views
1

我正在使用R在大小約爲10,000 x 15,000(事件x樣本)的非常大的數據矩陣上運行相關性。該數據集包含浮點值,範圍從-15:15,NA,NaN,inf和-inf。爲了簡化問題,我選擇了一次處理兩行矩陣,將它們稱爲vector1,vector2。命令如下:R cor(),method =「pearson」返回NA,但method =「spearman」返回值。爲什麼?

CorrelationSpearman = cor(vector1,vector2, method="spearman",use="pairwise.complete.obs") 
CorrelationPearson = cor(vector1,vector2,method="pearson",use="pairwise.complete.obs") 

對於矩陣中的大多數但不是所有的行矢量,我得到CorrelationPearson = NA。 CorrelationSpearman值似乎沒有問題。我已經檢查過矩陣尺寸是否正確,並且我已經對可以正常工作的較小數據運行測試。發生這種情況的原因有哪些?

+0

'Inf'會導致'皮爾森'問題。檢查cor(c(1:3,Inf),1:4,method =「pearson」); cor(c(1:3,Inf),1:4,method =「spearman」)。我認爲'Spearman's'可以'Inf'排列 – user20650 2014-11-20 19:26:46

回答

1

Pearson correlation coefficient依賴估計均值和(共)方差。無限值導致無限均值和無限變化,這會破壞計算。 SpearmanKendall相關係數是基於等級的,因此可以用無限值處理排序(但要小心樣本中的相關值!)。

嘗試:

> lix <- is.infinite(vector1) | is.infinite(vector2) 
> cor(vector1[!lix], vector2[!lix], method = "pearson", use = "pairwise.complete.obs") 

這只是撥弄出任何一對具有無限價值。 更廣泛地做到這一點,這樣的功能是有幫助的:

> inf2NA <- function(x) { x[is.infinite(x)] <- NA; x } 
> cor(inf2NA(vector1), inf2NA(vector2), ...) 

剛剛無限值轉換到NAS,然後,你認爲合適的use參數可以處理這些案件NA。

相關問題