【问题标题】:Rank correlation matrix in RR中的等级相关矩阵
【发布时间】:2013-05-21 16:10:52
【问题描述】:

在给定具有多列的数据框的情况下,如何在 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

然而,这看起来相当冗长和丑陋。我在想一定有更好的方法——如果是这样呢?

【问题讨论】:

  • 您的列表/数据框问题很可能通过使用sapply 来解决。
  • @joran 谢谢这符合 sapply 的帮助,它说它是 lapply 的简化版本,特别是如果可以的话,将结果作为矩阵返回。

标签: r


【解决方案1】:

你做错了——使用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(.,.))其中R(u) := rank(u, na.last="keep")。如果是 缺失值,排名根据的值计算 使用,或者基于完整的观察,或者基于成对的 每对重新排序的完整性。

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 2013-06-15
    • 2019-04-15
    • 2018-08-08
    • 2018-03-15
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多