簡體   English   中英

如何在R中將函數應用於Spearman秩相關系數?

[英]How to apply a function for Spearman's rank correlation coefficient in R?

我想編寫一個代碼,以應用功能計算數據集中列組合之間的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

有人可以幫我嗎?

您不需要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)應用於您提供數據的數據框中的每一對列。

#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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM