我想编写一个代码来应用函数来计算Spearman在数据集中的列组合之间的秩相关性 . 我有以下数据集:
library(openxlsx)
data <-read.xlsx("e:/LINGUISTICS/mydata.xlsx", 1);
A B C D
go see get eat
see get eat go
get go go get
eat eat see see
函数 cor(rank(x), rank(y), method = "spearman") 仅测量两列之间的相关性,例如A和B之间:
cor(rank(data$A), rank(data$B), method = "spearman")
但我需要计算所有可能的列组合(AB,AC,AD,BC,BD,CD)之间的相关性 . 我为此写了以下函数:
wert <- function(x, y) { cor(rank(x), rank(y), method = "spearman") }
我不知道如何在我的函数中实现所有可能的列组合(AB,AC,AD,BC,BD,CD)以便自动获得所有结果,因为我的真实数据有更多列,也作为矩阵相关分数,例如如下表:
A B C D
A 1 0.3 0.4 0.8
B 0.3 1 0.6 0.5
C 0.4 0.6 1 0.1
D 0.8 0.5 0.1 1
有人能帮助我吗?
2 回答
你不需要
rank
.cor
已经与method = "spearman"
计算了Spearman等级相关性 . 如果您想要data.frame的所有列之间的相关性,只需将data.frame传递给cor
,即cor(data, method = "spearman")
. 你应该学习help("cor")
.如果要手动执行此操作,请使用
combn
函数 .PS:你的额外挑战是你实际上有因子变量 . 无序因子的等级是一个奇怪的概念,但R只是在这里使用整理顺序 . 由于
cor
正确地期望数字输入,所以你应该先做data[] <- lapply(data, as.integer)
.我想你可以创建一个函数(pairedcolumns),然后将你的函数(spearman)应用到你提供它的数据框中的每对列 .