4

给定具有多列的数据框,如何在 R 中以优雅的方式生成秩相关矩阵?我找不到内置函数,所以我尝试了

> test=data.frame(x=c(1,2,3,4,5), y=c(5,4,3,2,1))
> cor(rank(test))

(为简单起见,只有 2 列,真实数据有 5 列)

> Error in cor(rank(test)) : supply both 'x' and 'y' or a matrix-like 'x'

我认为这是因为rank需要一个向量。所以我尝试了

> cor(lapply(test,rank))

将排名应用于数据框中的每一列,将数据框视为列表,这给出了错误

> supply both 'x' and 'y' or a matrix-like 'x'

我终于得到了一些可以使用的东西

> cor(data.frame(lapply(test,rank)))
   x  y
x  1 -1
y -1  1

然而,这似乎非常冗长和丑陋。我在想一定有更好的方法——如果是这样呢?

4

1 回答 1

6

你做错了——使用kendall方法参数cor()代替:

R> testdf <- data.frame(x=c(1,2,3,4,5), y=c(5,4,3,2,1))  
R> cor(testdf, method="kendall") 
   x  y 
x  1 -1    
y -1  1   
R> 

来自help(cor)

对于cor(),如果方法是"kendall""spearman",则使用 Kendall 的 tau 或 Spearman 的 rho 统计量来估计基于等级的关联度量。如果数据不一定来自双变量正态分布,则这些更稳健并且被推荐。对于 cov(),非 Pearson 方法是不寻常的,但为了完整起见可用。请注意,"spearman"基本上计算cor(R(x), R(y)) (或cov(.,.)) where R(u) := rank(u, na.last="keep")。在缺失值的情况下,排名的计算取决于使用的价值,或者基于完整的观察,或者基于对每对的重新排序的成对完整性。

于 2013-05-21T16:29:02.640 回答