7
votes

R: T-Test sur toutes les colonnes

J'ai essayé de faire un test T à toutes les colonnes (deux à la fois) de ma trame de données et d'extraire uniquement la valeur P. Voici ce que j'ai proposé:

for (i in c(5:525) ) {

t_test_p.value =sapply( Data[5:525], function(x) t.test(Data[,i],x, na.rm=TRUE)$p.value)

}

r

0 commentaires

5 Réponses :


16
votes

Essayez celui-ci

X <- rnorm(n=50, mean = 10, sd = 5)
Y <- rnorm(n=50, mean = 15, sd = 6)
Z <- rnorm(n=50, mean = 20, sd = 5)
Data <- data.frame(X, Y, Z)

library(plyr)

combos <- combn(ncol(Data),2)

adply(combos, 2, function(x) {
  test <- t.test(Data[, x[1]], Data[, x[2]])

  out <- data.frame("var1" = colnames(Data)[x[1]]
                    , "var2" = colnames(Data[x[2]])
                    , "t.value" = sprintf("%.3f", test$statistic)
                    ,  "df"= test$parameter
                    ,  "p.value" = sprintf("%.3f", test$p.value)
                    )
  return(out)

})



  X1 var1  var2 t.value       df p.value
1  1   X      Y  -5.598 92.74744   0.000
2  2   X      Z  -9.361 90.12561   0.000
3  3   Y      Z  -3.601 97.62511   0.000


3 commentaires

La réponse de Myassen208 est meilleure. En général, le paquet Plyr doit être utilisé autant que possible. Dead Handy !!!


Il suffit également de réaliser que si vous vouliez toutes les combinaisons de paires-sages, la réponse de Myaseen208 vous montre également comment utiliser Combn ()


Merci, cela fonctionne comme charme. J'ai une question de suivi cependant: Stackoverflow.com/q/9669411/612191



2
votes

En supposant que votre cadre de données ressemble à ceci comme ceci: xxx pré>

Le suivant p> xxx pré>

vous donnera des tests pour chaque ensemble de colonnes . Notez que cela ne vous donnera qu'un T.Test pour A & B, C & D et E & F. Si vous vouliez A & B, B & C, C & D, D & E et E & F, alors vous devriez faire: P>

pvals = sapply(tests, function(x){x$p.value})


0 commentaires

5
votes

Voici une autre solution, avec externe . xxx


0 commentaires

18
votes

Je recommanderais de convertir votre cadre de données en format long et utilisez paire.t.test avec approprié P.AdJust : xxx < / p>


0 commentaires

0
votes

Je cours ceci:

tres<-apply(y-x,1,t.test)
pval<-vapply(tres, "[[", 0, i = "p.value")


1 commentaires

N'utilisez pas sapply , utilisez vapply . Vous n'avez pas besoin du Unlist et cela donnera une erreur si les données ne sont pas comme prévu. De plus, votre CNA utilise "[[[" aussi. Donc, je ferais: vapply (tres, "[[[[[[[" P.Value ") (le 0 indique simplement qu'un chiffre doit être renvoyé)