R中的秩相关矩阵

时间:2013-05-21 16:10:53

标签: r

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

然而,这看起来非常冗长和丑陋。我认为必须有更好的方法 - 如果是这样的话?

1 个答案:

答案 0 :(得分:6)

您做错了 - 请使用kendall的{​​{1}}方法参数:

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",则为Kendall的tau或   Spearman的rho统计量用于估计基于等级的度量   协会。这些更强大,如果是,建议使用   数据不一定来自双变量正态分布。对于   "spearman",非Pearson方法很不寻常,但可以使用   完整性。请注意cov()基本上计算"spearman"   (或cor(R(x), R(y))cov(.,.)。如果是   缺失值,排名根据值计算   使用,基于完整的观察,或基于成对   每对重新排列的完整性。