2012-12-28 3 views
2

Existe-t-il un meilleur moyen de parcourir un ensemble de paramètres d'un ensemble de données donné? Évidemment, j'essaie d'obtenir une table de coefficients de corrélation: les colonnes sont "CI, CVP, moyenne PAP, moyenne SAP", les lignes sont "ALAT, ASAT, GGT, Bili, LDH, FBG". Pour chaque combinaison, j'aimerais obtenir le coefficient de corrélation et le niveau de signification (p = ...). Ci-dessous Vous voyez "la voie difficile". Mais existe-t-il un moyen plus élégant, éventuellement avec une table imprimable?Comment parcourir les paramètres à analyser

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

Répondre

9

il existe une fonction rcor.test() dans la bibliothèque ltm qui rend la table des coefficients de corrélation et des valeurs de p . Par exemple, les données utilisées iris n'ont pas votre cadre de données.

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 
+7

Il y a aussi 'rcorr' dans" Hmisc "qui vous donnera une matrice séparée pour les coefficients de corrélation et les p-values . – A5C1D2H2I1M1N2O1R2T1

10

L'astuce consiste à obtenir toutes les combinaisons possibles. Ici, je crée un data.frame avec 10 colonnes et j'obtiens toutes les combinaisons en utilisant la fonction combn. Il est alors assez simple d'obtenir les valeurs de corrélation et de 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: Un code plus compact, en utilisant l'argument FUN au sein de combn (selon la suggestion de Greg)

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") 
+2

Voilà comment je le ferais, mais j'apprécie le travail d'autres auteurs qui ont déjà apporté du code testé à des paquets bien connus (comme Hmisc). –

+2

Je ne suis pas sûr, mais je pense que vous pourriez avoir besoin d'utiliser: t <- cor.test (x [, idx [1]], x [, idx [2]], méthode = 'spearman') pour obtenir les réponses l'affiche originale cherche. –

+1

La fonction 'combn' a un argument' FUN', donc ce qui précède pourrait probablement être simplifié en passant directement la fonction utilisée dans 'apply' à' combn'. –

Questions connexes