在给定具有多列的数据框的情况下,如何在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
然而,这看起来非常冗长和丑陋。我认为必须有更好的方法 - 如果是这样的话?
答案 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(.,.)
。如果是 缺失值,排名根据值计算 使用,基于完整的观察,或基于成对 每对重新排列的完整性。