Cosa fa il comando anova () con un oggetto modello lmer?


30

Spero che questa sia una domanda a cui qualcuno qui può rispondere per me sulla natura della scomposizione di somme di quadrati da un modello a effetti misti adatto lmer(dal pacchetto lme4 R).

Prima di tutto, dovrei dire che sono a conoscenza della controversia con l'utilizzo di questo approccio e in pratica avrei più probabilità di usare un LRT avviato per confrontare i modelli (come suggerito da Faraway, 2006). Tuttavia, sono perplesso su come replicare i risultati, e quindi per la mia sanità mentale ho pensato di chiedere qui.

Fondamentalmente, sto imparando a usare modelli di effetti misti adatti al lme4pacchetto. So che è possibile utilizzare il anova()comando per fornire un riepilogo del test sequenziale degli effetti fissi nel modello. Per quanto ne so questo è ciò che Faraway (2006) definisce l'approccio dei "quadrati medi attesi". Quello che voglio sapere è come vengono calcolate le somme di quadrati?

So che potrei prendere i valori stimati da un particolare modello (usando coef()), supporre che siano fissi, e quindi fare test usando le somme dei quadrati dei residui del modello con e senza i fattori di interesse. Questo va bene per un modello contenente un singolo fattore all'interno del soggetto. Tuttavia, quando si implementa un disegno a trama divisa, le somme del valore dei quadrati che ottengo è equivalente al valore prodotto da R usando aov()con una Error()designazione appropriata . Tuttavia, questo è non la stessa come la somma dei quadrati prodotte dal anova()comando sull'oggetto modello, nonostante il fatto che i rapporti F sono uguali.

Naturalmente questo ha perfettamente senso in quanto non sono necessari gli Error()strati in un modello misto. Tuttavia, ciò deve significare che le somme dei quadrati sono in qualche modo penalizzate in un modello misto al fine di fornire rapporti F appropriati. Come si ottiene questo risultato? E in che modo il modello corregge in qualche modo la somma dei quadrati tra trama ma non corregge la somma dei quadrati all'interno della trama. Evidentemente questo è qualcosa che è necessario per un classico ANOVA a trama divisa che è stato ottenuto designando diversi valori di errore per i diversi effetti, quindi in che modo un modello a effetti misti lo consente?

Fondamentalmente, voglio essere in grado di replicare i risultati dal anova()comando applicato a un oggetto modello lmer per verificare i risultati e la mia comprensione, tuttavia, al momento posso ottenerlo per un normale disegno entro-soggetto ma non per la divisione- progettazione della trama e non riesco a scoprire perché questo è il caso.

Come esempio:

library(faraway)
library(lme4)
data(irrigation)

anova(lmer(yield ~ irrigation + variety + (1|field), data = irrigation))

Analysis of Variance Table
           Df Sum Sq Mean Sq F value
irrigation  3 1.6605  0.5535  0.3882
variety     1 2.2500  2.2500  1.5782

summary(aov(yield ~ irrigation + variety + Error(field/irrigation), data = irrigation))

Error: field
           Df Sum Sq Mean Sq F value Pr(>F)
irrigation  3  40.19   13.40   0.388  0.769
Residuals   4 138.03   34.51               

Error: Within
          Df Sum Sq Mean Sq F value Pr(>F)
variety    1   2.25   2.250   1.578  0.249
Residuals  7   9.98   1.426               

Come si può vedere soprattutto, i rapporti F concordano. Anche le somme di quadrati per varietà sono d'accordo. Tuttavia, le somme di quadrati per l'irrigazione non sono d'accordo, tuttavia sembra che l'output di lmer sia ridimensionato. Quindi cosa fa effettivamente il comando anova ()?


1
Potresti voler dare un'occhiata alla funzione mixed()da afexcui offre ciò che vuoi (via method = "PB"). E dato che hai ovviamente fatto alcuni test con i dati dei giocattoli, sarebbe sicuramente utile se puoi mostrare quelle equivalenze con i dati e il codice (quindi, nessun +1).
Henrik

@Henrik Folla dura ... Martyn, potresti fornire il riferimento per Faraway (2006), per favore?
Patrick Coulombe,


@PatrickCoulombe Hehe, hai ragione. Ma a volte una forza amichevole aiuta a ottenere domande migliori.
Henrik

1
Aaron ha ragione nel riferimento al libro, si scusa per non averlo fornito in origine!
Martyn,

Risposte:


31

Usa la fonte, Luke. Possiamo sbirciare all'interno della funzione ANOVA facendo getAnywhere(anova.Mermod). La prima parte di quella funzione è per confrontare due diversi modelli. L'anova sugli effetti fissi arriva nel grande elseblocco nella seconda metà:

 dc <- getME(object, "devcomp")
        X <- getME(object, "X")
        asgn <- attr(X, "assign")
        stopifnot(length(asgn) == (p <- dc$dims[["p"]]))
            ss <- as.vector(object@pp$RX() %*% object@beta)^2
        names(ss) <- colnames(X)
        terms <- terms(object)
        nmeffects <- attr(terms, "term.labels")[unique(asgn)]
        if ("(Intercept)" %in% names(ss)) 
            nmeffects <- c("(Intercept)", nmeffects)
        ss <- unlist(lapply(split(ss, asgn), sum))
        stopifnot(length(ss) == length(nmeffects))
        df <- vapply(split(asgn, asgn), length, 1L)
        ms <- ss/df
        f <- ms/(sigma(object)^2)
        table <- data.frame(df, ss, ms, f)
        dimnames(table) <- list(nmeffects, c("Df", "Sum Sq", 
            "Mean Sq", "F value"))
        if ("(Intercept)" %in% nmeffects) 
            table <- table[-match("(Intercept)", nmeffects), 
                ]
        attr(table, "heading") <- "Analysis of Variance Table"
        class(table) <- c("anova", "data.frame")
        table

objectè l'uscita lmer. Iniziamo a calcolare la somma dei quadrati nella riga 5: ss <- as.vector ...il codice moltiplica i parametri fissi (in beta) per una matrice triangolare superiore; quindi piazza ogni termine. Ecco quella matrice triangolare superiore per l'esempio di irrigazione. Ogni riga corrisponde a uno dei cinque parametri degli effetti fissi (intercetta, 3 gradi di libertà per l'irrigazione, 1 df per varietà).

zapsmall(irrigation.lmer@pp$RX(), digits = 3)
      [,1]  [,2]   [,3]   [,4]  [,5]
[1,] 0.813 0.203  0.203  0.203 0.407
[2,] 0.000 0.352 -0.117 -0.117 0.000
[3,] 0.000 0.000  0.332 -0.166 0.000
[4,] 0.000 0.000  0.000  0.287 0.000
[5,] 0.000 0.000  0.000  0.000 2.000

La prima riga ti dà la somma dei quadrati per l'intercettazione e l'ultima ti dà le SS per l'effetto varietà all'interno dei campi. Le righe 2-4 riguardano solo i 3 parametri per i livelli di irrigazione, quindi la pre-moltiplicazione ti dà tre pezzi di SS per l'irrigazione.

Questi pezzi non sono interessanti di per sé poiché provengono dal contrasto di trattamento predefinito in R, ma in linea ss <- unlist(lapply(split ....Bates raccoglie frammenti di somme di quadrati in base al numero di livelli e ai fattori a cui si riferiscono. C'è un sacco di libri in corso qui. Otteniamo anche i gradi di libertà (che sono 3 per l'irrigazione). Quindi, ottiene i quadrati medi che compaiono sulla stampa di anova. Infine, divide tutti i suoi quadrati dei mezzi per la varianza residua all'interno dei gruppi sigma(object)^2.

Quindi cosa sta succedendo? La filosofia di lmernon ha nulla a che fare con il metodo dei momenti usato dall'approccio aov. L'idea lmerè quella di massimizzare una probabilità marginale ottenuta integrando gli effetti casuali invisibili. In questo caso, il livello di fertilità casuale di ciascun campo. Il capitolo 2 di Pinheiro e Bates descrive la bruttezza di questo processo. La RXmatrice utilizzata per ottenere le somme dei quadrati è la loro matrice dall'equazione 2.17, pagina 70 del testo. Questa matrice è ottenuta da una serie di decomposizioni QR sulla (tra le altre cose) matrice di progettazione degli effetti casuali e , dove è la varianza dell'effetto di campo . Questo è quel fattore mancanteR00 σ 2 fσ2/σf2σf2 stavi chiedendo, ma non entra nella soluzione in modo trasparente o semplice.

Asintoticamente, le stime degli effetti fissi hanno distribuzione:

β^~N(β,σ2[R00-1R00-T])

R00β^β=0σ2σ2σ2R00σ2

Nota che non avresti ottenuto le stesse statistiche F se i dati fossero stati sbilanciati. Né avresti ottenuto le stesse statistiche F se avessi usato ML invece di REML.

aovσ2σf2σ2σf2

È interessante notare che Bates e Pinheiro raccomandano di utilizzare ANOVA per montare due modelli e fare un test del rapporto di verosimiglianza. Quest'ultimo tende ad essere anti-conservatore.

R00

zapsmall(fit2@pp$RX(), digits = 3)
      [,1]  [,2]   [,3]   [,4]   [,5]
[1,] 0.816 0.205  0.205  0.205  0.457
[2,] 0.000 0.354 -0.119 -0.119 -0.029
[3,] 0.000 0.000  0.334 -0.168 -0.040
[4,] 0.000 0.000  0.000  0.288 -0.071
[5,] 0.000 0.000  0.000  0.000  1.874

Come puoi vedere, le somme di quadrati per i parametri di irrigazione ora contengono anche alcuni degli varietyeffetti.


10
+6, è sempre bello vedere una vecchia domanda senza risposta ricevere e rispondere così bene. Possa la fonte essere con te ...
gung - Ripristina Monica
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.