R中的秩相关矩阵

Too*_*one 4 r

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

> test=data.frame(x=c(1,2,3,4,5), y=c(5,4,3,2,1))
> cor(rank(test))
Run Code Online (Sandbox Code Playgroud)

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

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

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

> cor(lapply(test,rank))
Run Code Online (Sandbox Code Playgroud)

获取应用于数据框中每列的等级,将数据框视为列表,从而产生错误

> supply both 'x' and 'y' or a matrix-like 'x'
Run Code Online (Sandbox Code Playgroud)

我终于得到了一些合作的东西

> cor(data.frame(lapply(test,rank)))
   x  y
x  1 -1
y -1  1
Run Code Online (Sandbox Code Playgroud)

然而,这似乎相当冗长和丑陋.我认为必须有更好的方法 - 如果是这样的话?

Dir*_*tel 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> 
Run Code Online (Sandbox Code Playgroud)

来自help(cor):

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