Come ottenere i risultati di un test post-hoc Tukey HSD in una tabella che mostra le coppie raggruppate?


13

Mi piacerebbe eseguire un test post-hoc TukeyHSD dopo il mio Anova a due vie con R, ottenendo una tabella contenente le coppie ordinate raggruppate per differenza significativa. (Mi dispiace per il testo, sono ancora nuovo con le statistiche.)

Vorrei avere qualcosa del genere:

inserisci qui la descrizione dell'immagine

Quindi, raggruppati con stelle o lettere.

Qualche idea? Ho testato la funzione HSD.test()dal agricolaepacchetto, ma sembra che non gestisca le tabelle a due vie.

Risposte:


22

La agricolae::HSD.testfunzione fa esattamente questo, ma dovrai fargli sapere che sei interessato a un termine di interazione . Ecco un esempio con un set di dati 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)

Questo dà i risultati mostrati di seguito:

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 

Abbinano ciò che otterremmo con i seguenti comandi:

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

Il pacchetto multcomp offre anche una visualizzazione simbolica ("display a lettere compatte", vedere Algoritmi per display a lettere compatte: confronto e valutazione per maggiori dettagli) di significativi confronti a coppie, sebbene non li presenti in un formato tabulare. Tuttavia, ha un metodo di stampa che consente di visualizzare comodamente i risultati utilizzando i grafici a scatole. Anche l'ordine di presentazione può essere modificato (opzione decreasing=) e ha molte più opzioni per confronti multipli. Esiste anche il pacchetto multcompView che estende tali funzionalità.

Ecco lo stesso esempio analizzato con 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)

Il trattamento che condivide la stessa lettera non è significativamente diverso, al livello scelto (impostazione predefinita, 5%).

inserisci qui la descrizione dell'immagine

Per inciso, c'è un nuovo progetto, attualmente ospitato su R-Forge, che sembra promettente: fattore trama . Include display basati su linee e lettere, nonché una panoramica della matrice (tramite un diagramma di livello) di tutti i confronti a coppie. Un documento di lavoro è disponibile qui: factorplot: migliorare la presentazione di contrasti semplici nei GLM


Grazie mille per questa esaustiva risposta! Proverò questi diversi metodi non appena avrò qualche minuto. Saluti!
Stragu,

Ho provato la funzione del pacchetto multcomp, messa quando uso la funzione 'cld ()' Ottengo l'errore 'Errore: sapply (split_names, length) == 2 non è tutto VERO' Qualche idea sul perché?
Stragu,

1
@chtfn Sembra esserci un problema con le etichette delle variabili. Una rapida occhiata al codice sorgente indica che questo messaggio di errore proviene dal insert_absorb()quale tenta di estrarre una coppia di trattamenti. Puoi forse provare a cambiare il separatore che hai usato per codificare i livelli del tuo termine di interazione? Senza un esempio funzionante, è difficile dire cosa sia successo.
chl

L'ho capito: avevo punti nei nomi dei miei genotipi e trattamenti, e siccome qlht () usa un punto per dividere i nomi delle coppie, è andato fuori di testa. Grazie mille per tutto il tuo aiuto, chl! :)
Stragu,

3
Ho notato oggi che ora devo aggiungere console=TRUEin HSD.test()al fine di ottenere le tabelle, nel caso in cui qualcuno cerca questo e vede alcun risultato. Probabilmente un aggiornamento di agricolae.
Stragu,

2

C'è una funzione chiamata TukeyHSDche, secondo il file di aiuto, calcola un insieme di intervalli di confidenza sulle differenze tra le medie dei livelli di un fattore con la probabilità di copertura specifica a livello familiare. Gli intervalli si basano sulla statistica del range Studentized, il metodo della "Differenza significativa onesta" di Tukey. Questo fa quello che vuoi?

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


Grazie per la vostra risposta. Sì, ho provato questa funzione, ma mi dà elenchi non elaborati di confronti. Quello che vorrei è vederli raggruppati come nell'immagine nella mia domanda, avere una visione chiara di quale gruppo differisce da quale gruppo e infine aggiungere i nomi dei gruppi sui miei grafici (ad esempio: a, ab, abc, bc , c)
Stragu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.