[英]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.