6 votes

Extraction des valeurs "p adj" d'un test de TukeyHSD

Avec un ensemble de données fictives :

Species      Var1     Var2   Var3
   a          1         2      3
   a          4         5      6 
   b          7         8      9
   b          10       11      12

J'ai plusieurs espèces et environ 50 variables (Var50). Je voudrais effectuer une Anova à une voie sur la variable de regroupement appariée (Espèce) pour chaque variable de réponse et obtenir le résultat des fréquences qui sont statistiquement significatives à l'IC de 95 %, par exemple. J'ai commencé à écrire une fonction pour faire cela comme suit :

data<-read.table("example.txt", header=T, sep="\t")
function(y){
for(y in 2:50)
anova.r<-aov(y~Species, data = data)
result<-TukeyHSD(anova.r, conf.level = 0.95) 
f.result ## I cannot figure out how to extract the "p adj" from the results

f.result<-sum(prob.result>=0.05)
write.table(f.result, file = "anova95.csv", sep = ",",
        col.names = FALSE, append=TRUE)
}  

En fin de compte, je voudrais que le tableau final (réponses fictives) ressemble à ceci

                     Var1   Var2   Var3......Var50 
Frequency at 95% CI   106    200    45         246 

Je sais que je peux utiliser [[]] pour accéder aux données dans les résultats du test de Tukey. J'ai essayé d'utiliser tukey.results[[1]][,1] jusqu'à tukey.results[[1]][,3] en vain. tukey.results[[1]] renvoie toutes les colonnes du test de Tukey.

De plus, je pense que je pourrais avoir à utiliser cbind quelque part dans la fonction pour obtenir les données dans leurs colonnes respectives. Ou bien je pensais qu'il serait possible d'utiliser la fonction apply mais je ne sais pas comment garder la variable de regroupement constante tout en faisant varier la variable de réponse à chaque itération.

Toute suggestion serait profondément appréciée.

4voto

Metrics Points 11880

Essayez ceci si vous êtes également à la recherche de variables :

summary(fm1 <- aov(breaks ~ wool + tension, data = warpbreaks))
kk<-TukeyHSD(fm1, "tension", ordered = TRUE)
kk$tension
result<-data.frame( kk$tension)
result["p.adj"]

            p.adj
M-H 0.447421021
L-H 0.001121788
L-M 0.033626219

2voto

TimothyEbert Points 53

La réponse n'a pas fonctionné sur mon système. Voici ma solution en commençant par le code fourni par Metrics.

 summary(fm1 <- aov(breaks ~ wool + tension, data = warpbreaks))
 kk<-TukeyHSD(fm1, "tension", ordered = TRUE)
 kk<-kk$tension          #strips off some headers in kk
 kk<-as.data.frame(kk)   #converts to data frame
 kk<-kk$'p adj'          #selects relevant output
 print(kk)               #to check answer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X