Как перебирать параметры для анализа

Есть ли лучший способ перебрать набор параметров данного набора данных? Очевидно, я пытаюсь получить таблицу коэффициентов корреляции: столбцы «КИ, ЦВД, среднее ЛАД, среднее САД», строки «АЛАТ, АсАТ, ГГТ, Били, ЛДГ, ВБГ». Для каждой комбинации я хотел бы получить коэффициент корреляции и уровень значимости (p=...). Ниже Вы видите «сложный путь». Но есть ли более элегантный способ, возможно, с таблицей для печати?

attach(Liver)
cor.test(CI, ALAT, method = "spearman")
cor.test(CI, ASAT, method = "spearman")
cor.test(CI, GGT, method = "spearman")
cor.test(CI, Bili, method = "spearman")
cor.test(CI, LDH, method = "spearman")
cor.test(CI, FBG, method = "spearman")

cor.test(CVP, ALAT, method = "spearman")
cor.test(CVP, ASAT, method = "spearman")
cor.test(CVP, GGT, method = "spearman")
cor.test(CVP, Bili, method = "spearman")
cor.test(CVP, LDH, method = "spearman")
cor.test(CVP, FBG, method = "spearman")

cor.test(meanPAP, ALAT, method = "spearman")
cor.test(meanPAP, ASAT, method = "spearman")
cor.test(meanPAP, GGT, method = "spearman")
cor.test(meanPAP, Bili, method = "spearman")
cor.test(meanPAP, LDH, method = "spearman")
cor.test(meanPAP, FBG, method = "spearman")

cor.test(meanSAP, ALAT, method = "spearman")
cor.test(meanSAP, ASAT, method = "spearman")
cor.test(meanSAP, GGT, method = "spearman")
cor.test(meanSAP, Bili, method = "spearman")
cor.test(meanSAP, LDH, method = "spearman")
cor.test(meanSAP, FBG, method = "spearman")

detach("Liver")

person Doc    schedule 28.12.2012    source источник


Ответы (2)


В библиотеке ltm есть функция rcor.test(), которая составляет таблицу коэффициентов корреляции и p-значений. Например, используются данные iris, так как нет вашего фрейма данных.

library(ltm)
rcor.test(iris[,1:4],method="spearman")


             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length  *****       -0.167       0.882        0.834     
Sepal.Width   0.041        *****      -0.310       -0.289     
Petal.Length <0.001       <0.001       *****        0.938     
Petal.Width  <0.001       <0.001      <0.001        *****     

upper diagonal part contains correlation coefficient estimates 
lower diagonal part contains corresponding p-values
person Didzis Elferts    schedule 28.12.2012
comment
В Hmisc также есть rcorr, который даст вам отдельную матрицу для коэффициентов корреляции и p-значений. - person A5C1D2H2I1M1N2O1R2T1; 28.12.2012

Хитрость заключается в том, чтобы получить все возможные комбинации. Здесь я создаю data.frame с 10 столбцами и получаю все комбинации с помощью функции combn. Тогда довольно просто получить значения корреляции и p.

set.seed(12)
x <- as.data.frame(matrix(rnorm(100), nrow=10))
combinations <- combn(ncol(x), 2)

out <- apply(combinations, 2, function(idx) {
    t <- cor.test(x[, idx[1]], x[, idx[2]], method = "spearman")
    c(names(x)[idx[1]], names(x)[idx[2]], t$estimate, t$p.value)
})
# more formatting if necessary
out <- as.data.frame(t(out))
names(out) <- c("col.idx1", "col.idx2", "cor", "pval")

Edit: Еще более компактный код за счет использования аргумента FUN внутри combn (согласно предложению Грега)

set.seed(12)
x <- as.data.frame(matrix(rnorm(100), nrow=10))
out <- as.data.frame(t(combn(ncol(x), 2, function(idx) {
    t <- cor.test(x[, idx[1]], x[, idx[2]], method = "spearman")
    c(names(x)[idx[1]], names(x)[idx[2]], t$estimate, t$p.value)
})))
names(out) <- c("col.idx1", "col.idx2", "cor", "pval")
person Arun    schedule 28.12.2012
comment
Я бы сделал так, но я ценю работу других авторов, которые уже предоставили проверенный код для известных пакетов (например, Hmisc). - person Roman Luštrik; 28.12.2012
comment
Я не уверен, но думаю, вам может понадобиться использовать: t ‹- cor.test(x[, idx[1]], x[, idx[2]], method='spearman') чтобы получить ответы оригинальный постер ищет. - person Mark Miller; 28.12.2012
comment
Функция combn имеет аргумент FUN, поэтому описанное выше, вероятно, можно было бы упростить, передав функцию, используемую в apply, непосредственно в combn. - person Greg Snow; 28.12.2012
comment
Я думаю, что аргумент FUN в combn должен быть одним из самых игнорируемых аргументов;) - person A5C1D2H2I1M1N2O1R2T1; 28.01.2013