Questo può sembrare un po 'di auto-promozione (e suppongo che lo sia). Ma ho sviluppato un pacchetto lsmeans per R (disponibile su CRAN) progettato per gestire esattamente questo tipo di situazione. Ecco come funziona per il tuo esempio:
> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)
> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
IV lsmean SE df lower.CL upper.CL
1 -3.009669 0.2237448 76 -3.4552957 -2.564043
2 -3.046072 0.2237448 76 -3.4916980 -2.600445
3 1.147080 0.2237448 76 0.7014539 1.592707
4 3.049153 0.2237448 76 2.6035264 3.494779
> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
contrast estimate SE df t.ratio p.value
mycon 22.36962 1.000617 76 22.356 <.0001
Se lo desideri, puoi specificare ulteriori contrasti nell'elenco. Per questo esempio, otterrai gli stessi risultati con il contrasto polinomiale lineare incorporato:
> con <- contrast(sample.lsm, "poly")
> con
contrast estimate SE df t.ratio p.value
linear 22.369618 1.0006172 76 22.356 <.0001
quadratic 1.938475 0.4474896 76 4.332 <.0001
cubic -6.520633 1.0006172 76 -6.517 <.0001
Per confermare ciò, si noti che la "poly"
specifica lo indirizza alla chiamata poly.lsmc
, che produce questi risultati:
> poly.lsmc(1:4)
linear quadratic cubic
1 -3 1 -1
2 -1 -1 3
3 1 -1 -3
4 3 1 1
Se si desidera eseguire un test congiunto di diversi contrasti, utilizzare la test
funzione con joint = TRUE
. Per esempio,
> test(con, joint = TRUE)
Ciò produrrà un test di "tipo III". Diversamente car::Anova()
, lo farà correttamente indipendentemente dalla codifica del contrasto utilizzata nella fase di adattamento del modello. Questo perché le funzioni lineari da testare sono specificate direttamente anziché implicitamente tramite la riduzione del modello. Un'ulteriore caratteristica è che viene rilevato un caso in cui i contrasti da testare sono linearmente dipendenti e vengono prodotti la statistica e i gradi di libertà corretti.