首页 文章

如何在R中应用Spearman秩相关系数的函数?

提问于
浏览
0

我想编写一个代码来应用函数来计算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 回答

  • 0

    你不需要 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) .

  • 0

    我想你可以创建一个函数(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)
    

相关问题