如何将函数应用于Spearman';s秩相关系数R?

如何将函数应用于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)之间

我想编写一个代码,用于应用函数计算数据集中列组合之间的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)之间的相关性。我为此编写了以下函数:

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()
@Volod
cor
在内部计算
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)