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)
}
5 Réponses :
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
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
En supposant que votre cadre de données ressemble à ceci comme ceci: Le suivant p> 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})
Voici une autre solution, avec externe code>.
Je recommanderais de convertir votre cadre de données en format long et utilisez paire.t.test code> avec approprié P.AdJust code>:
Je cours ceci:
tres<-apply(y-x,1,t.test) pval<-vapply(tres, "[[", 0, i = "p.value")
N'utilisez pas sapply code>, utilisez vapply code>. Vous n'avez pas besoin du Unlist code> et cela donnera une erreur si les données ne sont pas comme prévu. De plus, votre CNA utilise "[[[" code> aussi. Donc, je ferais: vapply (tres, "[[[[[[[" P.Value ") Code> (le 0 code> indique simplement qu'un chiffre doit être renvoyé)