Split-Plot ANOVA: test comparativi di modelli in R


12

Come posso testare gli effetti in un ANOVA a diagramma diviso usando confronti di modello adatti per l'uso con gli argomenti Xe Mdi anova.mlm()in R? Conosco ?anova.mlmDalgaard (2007) [1]. Purtroppo sfiora solo i disegni a trama divisa. In questo modo in un design completamente randomizzato con due fattori entro soggetti:

N  <- 20  # 20 subjects total
P  <- 3   # levels within-factor 1
Q  <- 3   # levels within-factor 2
DV <- matrix(rnorm(N* P*Q), ncol=P*Q)           # random data in wide format
id <- expand.grid(IVw1=gl(P, 1), IVw2=gl(Q, 1)) # intra-subjects layout of data matrix

library(car)        # for Anova()
fitA <- lm(DV ~ 1)  # between-subjects design: here no between factor
resA <- Anova(fitA, idata=id, idesign=~IVw1*IVw2)
summary(resA, multivariate=FALSE, univariate=TRUE)  # all tests ...

I seguenti confronti di modello portano agli stessi risultati. Il modello limitato non include l'effetto in questione ma tutti gli altri effetti dello stesso ordine o inferiori, il modello completo aggiunge l'effetto in questione.

anova(fitA, idata=id, M=~IVw1 + IVw2, X=~IVw2, test="Spherical") # IVw1
anova(fitA, idata=id, M=~IVw1 + IVw2, X=~IVw1, test="Spherical") # IVw2
anova(fitA, idata=id, M=~IVw1 + IVw2 + IVw1:IVw2,
                      X=~IVw1 + IVw2, test="Spherical")          # IVw1:IVw2

Un design Split-Splot con un fattore interno e uno tra soggetti:

idB  <- subset(id, IVw2==1, select="IVw1")          # use only first within factor
IVb  <- gl(2, 10, labels=c("A", "B"))               # between-subjects factor
fitB <- lm(DV[ , 1:P] ~ IVb)                        # between-subjects design
resB <- Anova(fitB, idata=idB, idesign=~IVw1)
summary(resB, multivariate=FALSE, univariate=TRUE)  # all tests ...

Questi sono i anova()comandi per replicare i test, ma non so perché funzionino. Perché i test dei seguenti confronti di modello portano agli stessi risultati?

anova(fitB, idata=idB, X=~1, test="Spherical") # IVw1, IVw1:IVb
anova(fitB, idata=idB, M=~1, test="Spherical") # IVb

Due fattori entro soggetti e uno tra soggetti:

fitC <- lm(DV ~ IVb)  # between-subjects design
resC <- Anova(fitC, idata=id, idesign=~IVw1*IVw2)
summary(resC, multivariate=FALSE, univariate=TRUE)  # all tests ...

Come posso replicare i risultati sopra indicati con i confronti dei modelli corrispondenti da utilizzare con gli argomenti Xe Mdi anova.mlm()? Qual è la logica dietro questi confronti tra modelli?

EDIT: suncoolsu ha sottolineato che per tutti gli scopi pratici, i dati di questi progetti dovrebbero essere analizzati utilizzando modelli misti. Tuttavia, mi piacerebbe ancora capire come replicare i risultati di summary(Anova())con anova.mlm(..., X=?, M=?).

[1]: Dalgaard, P. 2007. Nuove funzioni per l'analisi multivariata. R Notizie, 7 (2), 2-7.


Ehi @caracal, penso che il modo in cui stai usando "Split-Plot Design" non sia il modo in cui Casella, George lo definisce nel suo libro, Statistical Design. Split Plot parla sicuramente di annidamento, ma è un modo speciale di imporre la struttura di correlazione. E la maggior parte delle volte finirai per usare il lme4pacchetto per adattarlo al modello E NON lm. Ma questa potrebbe essere una visione basata su libri molto specifica. Lascerò altri commenti su di esso. Posso fare un esempio basato su come lo interpreto, che è diverso dal tuo.
suncoolsu

2
@suncoolsu La terminologia nelle scienze sociali potrebbe essere diversa, ma sia Kirk (1995, p512) che Maxwell & Delaney (2004, p592) chiamano modelli con uno "split-plot" compreso tra un e uno all'interno del fattore. Il fattore intermedio fornisce i "diagrammi" (analogo all'origine agricola).
Caracal,

Ho molte cose nel mio piatto al momento. Espanderò la mia risposta per essere più specifico alla tua domanda. Vedo che hai investito molto sforzo nel formulare la tua domanda. Grazie per quello
suncoolsu,

Risposte:


10

L' Xe Mfondamentalmente specificare i due modelli che si desidera confrontare, ma solo in termini di effetti entro i soggetti; mostra quindi i risultati per l'interazione di tutti gli effetti tra soggetti (compresa l'intercettazione) con gli effetti all'interno del soggetto che sono cambiati tra Xe M.

I tuoi esempi su fitBsono più facili da capire se aggiungiamo i valori predefiniti per Xe M:

anova(fitB, idata=idB, M=~1, X=~0, test="Spherical") # IVb
anova(fitB, idata=idB, M=diag(3), X=~1, test="Spherical") # IVw1, IVw1:IVb

Il primo modello è il passaggio da nessun effetto soggetto (tutti hanno la stessa media) a una media diversa per ciascuno, quindi abbiamo aggiunto l' ideffetto casuale, che è la cosa giusta per testare l'intercetta generale e il generale tra effetto soggetto su.

Il secondo modello pubblicizza l' id:IVw1interazione, che è la cosa giusta da testare IVw1e i IVw1:IVbtermini contro. Poiché esiste un solo effetto all'interno del soggetto (con tre livelli), il valore predefinito diag(3)nel secondo modello lo terrà conto; sarebbe equivalente a correre

anova(fitB, idata=idB, M=~IVw1, X=~1, test="Spherical") # IVw1, IVw1:IVb

Per te fitC, credo che questi comandi ricreano il Anovariepilogo.

anova(fitC, idata=id, M=~1, X=~0, test="Spherical") #IVb
anova(fitC, idata=id, M=~IVw1 + IVw2, X=~IVw2, test="Spherical") # IVw1
anova(fitC, idata=id, M=~IVw1 + IVw2, X=~IVw1, test="Spherical") # IVw2
anova(fitC, idata=id, M=~IVw1 + IVw2 + IVw1:IVw2,
                  X=~IVw1 + IVw2, test="Spherical")          # IVw1:IVw2

Ora, come hai scoperto, questi comandi sono davvero complicati. Per fortuna, non c'è più motivo di usarli più. Se sei disposto ad assumere la sfericità, dovresti semplicemente usare aov, o per una sintassi ancora più semplice, basta usare lme calcolare tu stesso i test F giusti. Se non si è disposti ad assumere la sfericità, utilizzare lmeè davvero la strada da percorrere poiché si ottiene molta più flessibilità rispetto alle correzioni GG e HF.

Ad esempio, ecco il codice aove lmper il tuo fitA. Devi prima avere i dati in formato lungo; ecco un modo per farlo:

library(reshape)
d0 <- data.frame(id=1:nrow(DV), DV)
d0$IVb <- IVb
d0 <- melt(d0, id.vars=c(1,11), measure.vars=2:10)
id0 <- id
id0$variable <- factor(levels(d0$variable), levels=levels(d0$variable))
d <- merge(d0, id0)
d$id <- factor(d$id)

Ed ecco il lm andcodice aov`:

anova(lm(value ~ IVw1*IVw2*id, data=d))
summary(aov(value ~ IVw1*IVw2 + Error(id/(IVw1*IVw2)), data=d))

Grazie mille, è esattamente quello che stavo cercando! Ero ancora interessato a anova()causa del problema Anova()descritto qui . Ma il tuo ultimo suggerimento funziona altrettanto bene ed è più semplice. (Piccola cosa: penso che alle ultime 2 righe manchi ciascuna 1 parentesi di chiusura, e dovrebbe leggere Error(id/(IVw1*IVw2)))
caracal

8

I disegni a trama divisa nacquero in agricoltura, da cui il nome. Ma si verificano spesso e direi - il cavallo di battaglia della maggior parte degli studi clinici. La trama principale viene trattata con un livello di un fattore mentre i livelli di alcuni altri fattori possono variare con le sottotrame. Il design nasce a seguito di restrizioni su una randomizzazione completa. Ad esempio: un campo può essere diviso in quattro sottotrame. Potrebbe essere possibile piantare diverse varietà in sottotrame, ma è possibile utilizzare un solo tipo di irrigazione per l'intero campo. Non la distinzione tra divisioni e blocchi. I blocchi sono caratteristiche delle unità sperimentali di cui abbiamo la possibilità di sfruttare la progettazione sperimentale, perché sappiamo che sono lì. Le divisioni, d'altra parte, impongono una limitazione su quali assegnazioni di fattori sono possibili. Impongono requisiti per la progettazione che impediscono una randomizzazione completa.

Sono usati molto negli studi clinici in cui quando un fattore è facile da cambiare mentre un altro fattore richiede molto più tempo per cambiare. Se lo sperimentatore deve eseguire consecutivamente tutte le corse per ciascun livello del fattore difficile da cambiare, il progetto di una trama divisa risulta con il fattore difficile da cambiare che rappresenta l'intero fattore di trama.

Ecco un esempio: in una sperimentazione sul campo agricolo, l'obiettivo era determinare gli effetti di due varietà di colture e quattro diversi metodi di irrigazione. Erano disponibili otto campi, ma è possibile applicare un solo tipo di irrigazione a ciascun campo. I campi possono essere divisi in due parti con una varietà diversa in ciascuna parte. L'intero fattore della trama è l'irrigazione, che dovrebbe essere assegnata casualmente ai campi. All'interno di ciascun campo viene assegnata la varietà.

Ecco come farlo in R:

install.packages("faraway")
data(irrigation)
summary(irrigation)

library(lme4)

R> (lmer(yield ~ irrigation * variety + (1|field), data = irrigation))
Linear mixed model fit by REML 
Formula: yield ~ irrigation * variety + (1 | field) 
   Data: irrigation 
  AIC  BIC logLik deviance REMLdev
 65.4 73.1  -22.7     68.6    45.4
Random effects:
 Groups   Name        Variance Std.Dev.
 field    (Intercept) 16.20    4.02    
 Residual              2.11    1.45    
Number of obs: 16, groups: field, 8

Fixed effects:
                       Estimate Std. Error t value
(Intercept)               38.50       3.02   12.73
irrigationi2               1.20       4.28    0.28
irrigationi3               0.70       4.28    0.16
irrigationi4               3.50       4.28    0.82
varietyv2                  0.60       1.45    0.41
irrigationi2:varietyv2    -0.40       2.05   -0.19
irrigationi3:varietyv2    -0.20       2.05   -0.10
irrigationi4:varietyv2     1.20       2.05    0.58

Correlation of Fixed Effects:
            (Intr) irrgt2 irrgt3 irrgt4 vrtyv2 irr2:2 irr3:2
irrigation2 -0.707                                          
irrigation3 -0.707  0.500                                   
irrigation4 -0.707  0.500  0.500                            
varietyv2   -0.240  0.170  0.170  0.170                     
irrgtn2:vr2  0.170 -0.240 -0.120 -0.120 -0.707              
irrgtn3:vr2  0.170 -0.120 -0.240 -0.120 -0.707  0.500       
irrgtn4:vr2  0.170 -0.120 -0.120 -0.240 -0.707  0.500  0.500

Fondamentalmente, ciò che questo modello dice è che l'irrigazione e la varietà sono effetti fissi e la varietà è nidificata all'interno dell'irrigazione. I campi sono gli effetti casuali e pittoricamente sarà qualcosa di simile

I_1 | I_2 | I_3 | I_4

V_1 V_2 | V_1 V_2 | V_1 V_2 | V_1 V_2

Ma questa era una variante speciale con effetto di trama intera fissa ed effetto di trama secondaria. Possono esserci varianti in cui una o più sono casuali. Possono esserci disegni più complicati come disegni a trama divisa ... In sostanza, si può andare selvaggio e folle. Ma data la struttura e la distribuzione sottostanti (cioè fisse o casuali, nidificate o incrociate, ..) è chiaramente compresa, una lmer-Ninjavolontà non avrà problemi nella modellazione. Potrebbe essere l'interpretazione sarà un disastro.

Per quanto riguarda i confronti, supponiamo di avere lmer1e lmer2:

anova(lmer1, lmer2)

ti fornirà il test appropriato basato sulla statistica del test chi-sq con gradi di libertà pari alla differenza di parametri.

cf: Faraway, J., Estensione dei modelli lineari con R.

Casella, G., Progettazione statistica


Apprezzo l'introduzione per analizzare i progetti split-splot con modelli a effetti misti e ulteriori informazioni di sfondo! È certamente il modo preferito per eseguire l'analisi. Ho aggiornato la mia domanda per sottolineare che mi piacerebbe ancora sapere come fare "alla vecchia maniera".
Caracal,
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.