Jak uzyskać wyniki post-hoc testu Tukey HSD w tabeli pokazującej zgrupowane pary?

13

Chciałbym wykonać test post-hoc TukeyHSD po mojej dwukierunkowej Anova z R, uzyskując tabelę zawierającą posortowane pary pogrupowane według znaczących różnic. (Przepraszam za brzmienie, wciąż jestem nowy ze statystykami).

Chciałbym mieć coś takiego:

wprowadź opis zdjęcia tutaj

Pogrupowane w gwiazdki lub litery.

Dowolny pomysł? Testowałem funkcję HSD.test()z agricolaepakietu, ale wygląda na to, że nie obsługuje ona tabel dwukierunkowych.

stragu
źródło

Odpowiedzi:

22

agricolae::HSD.testFunkcja robi dokładnie to, ale trzeba będzie niech wiedzą, że jesteś zainteresowany w perspektywie interakcji . Oto przykład z zestawem danych 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)

To daje wyniki pokazane poniżej:

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 

Pasują do tego, co uzyskalibyśmy za pomocą następujących poleceń:

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

Multcomp Pakiet oferuje również symboliczną wizualizację ( „kompaktowe nas wyświetlacze”, patrz algorytmów Compact List Wyświetlanie: porównanie i ocena więcej szczegółów) znaczących porównań parami, choć nie przedstawia je w formie tabelarycznej. Ma jednak metodę drukowania, która pozwala wygodnie wyświetlać wyniki za pomocą wykresów pudełkowych. Kolejność prezentacji może być również zmieniona (opcja decreasing=) i ma znacznie więcej opcji dla wielu porównań. Istnieje również pakiet multcompView , który rozszerza te funkcje.

Oto ten sam przykład analizowany z 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)

Leczenie dzielące ten sam list nie różni się znacząco na wybranym poziomie (domyślnie 5%).

wprowadź opis zdjęcia tutaj

Nawiasem mówiąc, jest nowy projekt, obecnie hostowany w R-Forge, który wygląda obiecująco: factorplot . Obejmuje wyświetlacze liniowe i literowe, a także przegląd macierzy (poprzez wykres poziomu) wszystkich porównań par. Dokument roboczy można znaleźć tutaj: factorplot: Poprawa prezentacji prostych kontrastów w GLM

chl
źródło
Dziękuję bardzo za tę wyczerpującą odpowiedź! Wypróbuję te różne metody, jak tylko będę miał kilka minut. Twoje zdrowie!
stragu
Wypróbowałem funkcję pakietu Multcomp, wstawiam, gdy korzystam z funkcji „cld ()”, pojawia się błąd „Błąd: sapply (nazwy_podzielone, długość) == 2 to nie wszystko PRAWDA”. Masz pojęcie, dlaczego?
stragu
1
@chtfn Wygląda na to, że jest problem ze zmiennymi etykietami. Szybkie spojrzenie na kod źródłowy wskazuje, że pochodzi ten komunikat o błędzie, z insert_absorb()którego próbuje wyodrębnić parę metod leczenia. Być może możesz spróbować zmienić separator użyty do kodowania poziomów terminu interakcji? Bez działającego przykładu trudno powiedzieć, co się stało.
chl
Zrozumiałem: miałem punkty w genotypach i nazwach zabiegów, a ponieważ qlht () używa punktu do podzielenia nazw par, to przeraziło. Dziękuję bardzo za całą pomoc, chl! :)
stragu
3
Zauważyłem dzisiaj, że teraz trzeba dodać console=TRUEw HSD.test()w celu uzyskania tabel, w przypadku, ktoś próbuje to i widzi żadnego rezultatu. Prawdopodobnie aktualizacja agricolae.
stragu
2

Istnieje tak zwana funkcja, TukeyHSDktóra zgodnie z plikiem pomocy oblicza zestaw przedziałów ufności na podstawie różnic między średnimi poziomów współczynnika przy określonym rodzinnym prawdopodobieństwie pokrycia. Przedziały są oparte na statystyce zasięgu uczonego, metodzie Tukeya „Uczciwa znacząca różnica”. Czy to robi co chcesz?

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

smillig
źródło
Dziękuję za odpowiedź. Tak, wypróbowałem tę funkcję, ale daje mi surowe listy porównań. Chciałbym zobaczyć je pogrupowane jak na obrazku w moim pytaniu, aby mieć jasny obraz, która grupa różni się do której grupy, i ewentualnie dodać nazwy grup na moich wykresach (na przykład: a, ab, abc, bc , c)
stragu