Я хочу написать код для применения функции вычисления ранговой корреляции Спирмена между комбинациями столбцов из набора данных. У меня есть следующий набор данных:
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"
. Если требуется корреляция между всеми столбцами данных.кадр, просто передайте данные.кадр кcor
, Тоcor(data, method = "spearman")
есть . Вы должны учитьсяhelp("cor")
.Если вы хотите сделать это вручную, используйте
combn
функцию.PS: ваша дополнительная проблема заключается в том, что у вас на самом деле есть факторные переменные. Ранг для неупорядоченного фактора является странным понятием, но R просто использует порядок сортировки здесь. Так
cor
как правильно ожидает числовой ввод, вы должны сделатьdata[] <- lapply(data, as.integer)
первый.Я думаю, что вы можете просто сделать функцию (pairedcolumns), которая затем применит вашу функцию (spearman) к каждой паре столбцов в фрейме данных, который вы ее передаете.