Для числовых данных у вас есть решение.Но это категорические данные, вы сказали.Тогда жизнь становится немного сложнее ...
Ну, во-первых: величина ассоциации между двумя категориальными переменными измеряется не с помощью ранговой корреляции Спирмена, а с помощью критерия хи-квадрат.Что на самом деле является логикой.Ранжирование означает, что в ваших данных есть определенный порядок.Теперь скажите мне, что больше, желтый или красный?Я знаю, иногда R выполняет ранговую корреляцию Спирмена на категориальных данных.Если я кодирую желтый 1 и красный 2, R будет считать красный больше желтого.
Итак, забудьте о Спирмане для категориальных данных.Я продемонстрирую chisq-тест и то, как выбирать столбцы с помощью combn ().Но вы выиграли бы немного больше времени с книгой Агрести: http://www.amazon.com/Categorical-Analysis-Wiley-Probability-Statistics/dp/0471360937
set.seed(1234)
X <- rep(c("A","B"),20)
Y <- sample(c("C","D"),40,replace=T)
table(X,Y)
chisq.test(table(X,Y),correct=F)
# I don't use Yates continuity correction
#Let's make a matrix with tons of columns
Data <- as.data.frame(
matrix(
sample(letters[1:3],2000,replace=T),
ncol=25
)
)
# You want to select which columns to use
columns <- c(3,7,11,24)
vars <- names(Data)[columns]
# say you need to know which ones are associated with each other.
out <- apply( combn(columns,2),2,function(x){
chisq.test(table(Data[,x[1]],Data[,x[2]]),correct=F)$p.value
})
out <- cbind(as.data.frame(t(combn(vars,2))),out)
Тогда вы должны получить:
> out
V1 V2 out
1 V3 V7 0.8116733
2 V3 V11 0.1096903
3 V3 V24 0.1653670
4 V7 V11 0.3629871
5 V7 V24 0.4947797
6 V11 V24 0.7259321
Где V1 и V2 указывают, между какими переменными он идет,и "out" дает значение p для ассоциации.Здесь все переменные независимы.Что и следовало ожидать, поскольку я создал данные наугад.