如何将函数应用于Spearman';s秩相关系数R?
我想编写一个代码,用于应用函数计算数据集中列组合之间的Spearman秩相关性。我有以下数据集:如何将函数应用于Spearman';s秩相关系数R?,r,function,correlation,rank,R,Function,Correlation,Rank,我想编写一个代码,用于应用函数计算数据集中列组合之间的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 但我需要计算所有可能的列组合(AB、AC、AD、BC、BD、CD)之间
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
但我需要计算所有可能的列组合(AB、AC、AD、BC、BD、CD)之间的相关性。我为此编写了以下函数:
wert <- function(x, y) { cor(rank(x), rank(y), method = "spearman") }
有人能帮我吗?你不需要
rank
cor
已经使用method=“Spearman”
计算了Spearman等级相关性。如果需要data.frame的所有列之间的相关性,只需将data.frame传递给cor
,即cor(data,method=“spearman”)
。你应该学习帮助(“cor”)
如果要手动执行此操作,请使用combn
功能
PS:你的另一个挑战是你实际上有因子变量。无序因子的秩是一个奇怪的概念,但R在这里只使用排序规则。由于
cor
正确地期望数字输入,因此您应该执行data[]我认为您可以创建一个函数(pairedcolumns),然后将您的函数(spearman)应用于您输入的数据框中的每一对列
#This function works on a data frame (x) usingwhichever other function (fun) you select by making all pairs of columns possible.
pairedcolumns <- function(x,fun)
{
n <- ncol(x)##find out how many columns are in the data frame
foo <- matrix(0,n,n)
for ( i in 1:n)
{
for (j in 1:n)
{
foo[i,j] <- fun(x[,i],x[,j])
}
}
colnames(foo)<-rownames(foo)<-colnames(x)
return(foo)
}
results<-pairedcolumns(yourdataframe[,2:8], function)
#此函数通过使所有列对成为可能,在数据帧(x)上使用您选择的任何其他函数(fun)。
谢谢你的回答。但是如果没有rank()
,它就不起作用,因为斯皮尔曼秩相关性比较了两个变量的排名。为了获得因子变量的排名列表,我应该使用rank()
@Volodcor
在内部计算method=“spearman”
的排名。
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
#This function works on a data frame (x) usingwhichever other function (fun) you select by making all pairs of columns possible.
pairedcolumns <- function(x,fun)
{
n <- ncol(x)##find out how many columns are in the data frame
foo <- matrix(0,n,n)
for ( i in 1:n)
{
for (j in 1:n)
{
foo[i,j] <- fun(x[,i],x[,j])
}
}
colnames(foo)<-rownames(foo)<-colnames(x)
return(foo)
}
results<-pairedcolumns(yourdataframe[,2:8], function)