Comment obtenir les résultats d'un test post-hoc Tukey HSD dans un tableau montrant les paires groupées?

13

J'aimerais effectuer un test post-hoc TukeyHSD après mon Anova bidirectionnel avec R, en obtenant un tableau contenant les paires triées groupées par différence significative. (Désolé pour le libellé, je suis encore nouveau avec les statistiques.)

Je voudrais avoir quelque chose comme ça:

entrez la description de l'image ici

Donc, regroupé avec des étoiles ou des lettres.

Une idée? J'ai testé la fonction HSD.test()du agricolaepackage, mais il semble qu'elle ne gère pas les tableaux bidirectionnels.

stragu
la source

Réponses:

22

La agricolae::HSD.testfonction fait exactement cela, mais vous devrez lui faire savoir que vous êtes intéressé par un terme d'interaction . Voici un exemple avec un jeu de données Stata:

library(foreign)
yield <- read.dta("http://www.stata-press.com/data/r12/yield.dta")
tx <- with(yield, interaction(fertilizer, irrigation))
amod <- aov(yield ~ tx, data=yield)
library(agricolae)
HSD.test(amod, "tx", group=TRUE)

Cela donne les résultats ci-dessous:

Groups, Treatments and means
a        2.1     51.17547 
ab       4.1     50.7529 
abc      3.1     47.36229 
 bcd     1.1     45.81229 
  cd     5.1     44.55313 
   de    4.0     41.81757 
    ef   2.0     38.79482 
    ef   1.0     36.91257 
     f   3.0     36.34383 
     f   5.0     35.69507 

Ils correspondent à ce que nous obtiendrions avec les commandes suivantes:

. webuse yield
. regress yield fertilizer##irrigation
. pwcompare fertilizer#irrigation, group mcompare(tukey)

-------------------------------------------------------
                      |                           Tukey
                      |     Margin   Std. Err.   Groups
----------------------+--------------------------------
fertilizer#irrigation |
                 1 0  |   36.91257   1.116571    AB    
                 1 1  |   45.81229   1.116571      CDE 
                 2 0  |   38.79482   1.116571    AB    
                 2 1  |   51.17547   1.116571         F
                 3 0  |   36.34383   1.116571    A     
                 3 1  |   47.36229   1.116571       DEF
                 4 0  |   41.81757   1.116571     BC   
                 4 1  |    50.7529   1.116571        EF
                 5 0  |   35.69507   1.116571    A     
                 5 1  |   44.55313   1.116571      CD  
-------------------------------------------------------
Note: Margins sharing a letter in the group label are
      not significantly different at the 5% level.

Le package multcomp propose également une visualisation symbolique (`` affichages de lettres compacts '', voir Algorithmes pour les affichages de lettres compacts: comparaison et évaluation pour plus de détails) de comparaisons par paires significatives, bien qu'il ne les présente pas sous forme de tableau. Cependant, il dispose d'une méthode de traçage qui permet d'afficher facilement les résultats à l'aide de boîtes à moustaches. L'ordre de présentation peut également être modifié (option decreasing=), et il a beaucoup plus d'options pour des comparaisons multiples. Il existe également le package multcompView qui étend ces fonctionnalités.

Voici le même exemple analysé avec glht:

library(multcomp)
tuk <- glht(amod, linfct = mcp(tx = "Tukey"))
summary(tuk)          # standard display
tuk.cld <- cld(tuk)   # letter-based display
opar <- par(mai=c(1,1,1.5,1))
plot(tuk.cld)
par(opar)

Les traitements partageant la même lettre ne sont pas significativement différents, au niveau choisi (par défaut, 5%).

entrez la description de l'image ici

Soit dit en passant , il y a un nouveau projet, actuellement hébergé sur R-Forge, qui semble prometteur: factorplot . Il comprend des affichages basés sur des lignes et des lettres, ainsi qu'un aperçu matriciel (via un tracé de niveau) de toutes les comparaisons par paires. Un document de travail peut être trouvé ici: factorplot: Amélioration de la présentation des contrastes simples dans les GLM

chl
la source
Merci beaucoup pour cette réponse exhaustive! J'essaierai ces différentes méthodes dès que j'aurai quelques minutes. À votre santé!
stragu
J'ai essayé la fonction de paquetage multcomp, mise lorsque j'utilise la fonction 'cld ()' j'obtiens l'erreur 'Erreur: sapply (split_names, length) == 2 n'est pas tout VRAI' Une idée pourquoi?
stragu
1
@chtfn Il semble y avoir un problème avec les étiquettes de variables. Un rapide coup d'œil au code source indique que ce message d'erreur provient insert_absorb()duquel tente d'extraire une paire de traitements. Vous pouvez peut-être essayer de changer le séparateur que vous avez utilisé pour coder les niveaux de votre terme d'interaction? Sans exemple concret, il est difficile de dire ce qui s'est passé.
chl
Je l'ai compris: j'avais des points dans les noms de mes génotypes et traitements, et comme qlht () utilise un point pour diviser les noms des paires, ça a flippé. Merci beaucoup pour toute votre aide, chl! :)
stragu
3
J'ai remarqué aujourd'hui que je dois maintenant ajouter console=TRUEdans HSD.test()afin d'obtenir les tableaux, au cas où quelqu'un tente cela et ne voit aucun résultat. Probablement une mise à jour de agricolae.
stragu
2

Il existe une fonction appelée TukeyHSDqui, selon le fichier d'aide, calcule un ensemble d'intervalles de confiance sur les différences entre les moyennes des niveaux d'un facteur avec la probabilité de couverture familiale spécifiée. Les intervalles sont basés sur la statistique de la plage Studentized, la méthode "Honest Significant Difference" de Tukey. Est-ce que cela fait ce que vous voulez?

http://stat.ethz.ch/R-manual/R-patched/library/stats/html/TukeyHSD.html

smillig
la source
Merci pour votre réponse. Oui, j'ai essayé cette fonction, mais elle me donne des listes brutes de comparaisons. Ce que je voudrais, c'est de les voir groupés comme dans l'image de ma question, d'avoir une vue claire de quel groupe diffère de quel groupe, et éventuellement d'ajouter les noms de groupe sur mes graphiques (par exemple: a, ab, abc, bc , c)
stragu