Was macht der Befehl anova () mit einem früheren Modellobjekt?

30

Hoffentlich ist dies eine Frage, die mir hier jemand zur Art der Zerlegung von Quadratsummen aus einem Modell mit gemischten Effekten beantworten kann, das dazu passt lmer(aus dem Paket lme4 R).

Zuallererst sollte ich sagen, dass mir die Kontroverse bei der Verwendung dieses Ansatzes bewusst ist, und in der Praxis würde ich eher ein Bootstrap-LRT verwenden, um Modelle zu vergleichen (wie von Faraway, 2006, vorgeschlagen). Ich bin jedoch verwirrt darüber, wie ich die Ergebnisse replizieren soll, und aus Gründen meiner eigenen Vernunft dachte ich, ich würde hier nachfragen.

Grundsätzlich beschäftige ich mich mit Modellen mit gemischten Effekten, die zum lme4Paket passen . Ich weiß, dass Sie den anova()Befehl verwenden können, um eine Zusammenfassung der sequenziellen Tests der Fixeffekte im Modell zu erhalten. Soweit ich weiß, wird dies von Faraway (2006) als "Expected Mean Squares" -Ansatz bezeichnet. Ich möchte wissen, wie die Quadratsummen berechnet werden.

Ich weiß, dass ich die geschätzten Werte aus einem bestimmten Modell (unter Verwendung von coef()) nehmen, davon ausgehen kann, dass sie fest sind, und dann Tests unter Verwendung der Quadratsummen von Modellresten mit und ohne die interessierenden Faktoren durchführen kann. Dies ist in Ordnung für ein Modell, das einen einzelnen subjektinternen Faktor enthält. Wenn jedoch ein Split-Plot-Design implementiert wird, entspricht die Summe der Quadrate, die ich erhalte, dem Wert, der von R unter Verwendung aov()einer geeigneten Error()Bezeichnung erzeugt wird. Dies ist jedoch nicht dasselbe wie die vom anova()Befehl auf dem Modellobjekt erzeugten Quadratsummen , obwohl die F-Verhältnisse gleich sind.

Dies ist natürlich völlig sinnvoll, da die Error()Schichten in einem gemischten Modell nicht benötigt werden . Dies muss jedoch bedeuten, dass die Quadratsummen in einem gemischten Modell irgendwie bestraft werden, um geeignete F-Verhältnisse bereitzustellen. Wie wird das erreicht? Und wie korrigiert das Modell die Summe der Quadrate zwischen den Plots, aber nicht die Summe der Quadrate innerhalb der Plots? Offensichtlich ist dies etwas, was für eine klassische Split-Plot-ANOVA erforderlich ist, bei der unterschiedliche Fehlerwerte für die verschiedenen Effekte festgelegt wurden. Wie kann ein Mixed-Effect-Modell dies berücksichtigen?

Grundsätzlich möchte ich in der Lage sein, die Ergebnisse des anova()Befehls, der auf ein früheres Modellobjekt angewendet wurde, selbst zu replizieren , um die Ergebnisse und mein Verständnis zu überprüfen. Derzeit kann ich dies jedoch für ein normales themeninternes Design erreichen, jedoch nicht für die Teilung. Plot Design und ich kann nicht scheinen herauszufinden, warum dies der Fall ist.

Als Beispiel:

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               

Wie zu sehen ist, stimmen vor allem die F-Verhältnisse überein. Auch die Quadratsummen für die Vielfalt stimmen überein. Die Quadratsummen für die Bewässerung stimmen jedoch nicht überein, jedoch scheint die geringere Ausgabe skaliert zu sein. Was macht der Befehl anova () eigentlich?

Martyn
quelle
1
Vielleicht möchten Sie sich die Funktion ansehen, mixed()von afexder aus Sie die gewünschten Angebote erhalten (über method = "PB"). Und da Sie offensichtlich einige Tests mit Spielzeugdaten durchgeführt haben, wäre es auf jeden Fall hilfreich, wenn Sie diese Äquivalenzen mit den Daten und dem Code zeigen können (daher keine +1).
Henrik
@ Henrik Tough crowd ... Martyn, könnten Sie bitte die Referenz für Faraway (2006) angeben?
Patrick Coulombe
@PatrickCoulombe Hehe, du hast recht. Aber manchmal hilft eine freundliche Kraft dabei, bessere Fragen zu stellen.
Henrik
1
Aaron ist in der Buchreferenz korrekt, entschuldigt, dass er sie ursprünglich nicht zur Verfügung gestellt hat!
Martyn

Antworten:

31

Nutze die Quelle, Luke. Wir können damit einen Blick in die ANOVA-Funktion werfen getAnywhere(anova.Mermod). Der erste Teil dieser Funktion dient zum Vergleichen zweier verschiedener Modelle. Die Anova für die Fixeffekte kommt elsein der zweiten Hälfte in den großen Block:

 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

objectist die niedrigere Ausgabe. Wir beginnen die Summe der Quadrate in Zeile 5 zu berechnen: ss <- as.vector ...Der Code multipliziert die festen Parameter (in beta) mit einer oberen Dreiecksmatrix; dann quadriert jeder Begriff. Hier ist die obere Dreiecksmatrix für das Bewässerungsbeispiel. Jede Zeile entspricht einem der fünf Parameter für feste Effekte (Achsenabschnitt, 3 Freiheitsgrade für die Bewässerung, 1 df für die Sorte).

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

In der ersten Zeile sehen Sie die Summe der Quadrate für den Achsenabschnitt und in der letzten Zeile die SS für den Sorteneffekt innerhalb der Felder. In den Zeilen 2 bis 4 sind nur die 3 Parameter für die Bewässerungsstufen enthalten. Durch Vormultiplikation erhalten Sie drei SS-Teile für die Bewässerung.

Diese Stücke sind an sich nicht interessant, da sie vom Standardbehandlungskontrast in R herrühren, aber in Zeile ss <- unlist(lapply(split ....Bates werden Bits von Quadratsummen entsprechend der Anzahl der Ebenen und den Faktoren, auf die sie sich beziehen, aufgesammelt. Hier wird viel Buch geführt. Wir erhalten auch die Freiheitsgrade (die 3 für die Bewässerung sind). Dann erhält er die mittleren Quadrate, die auf dem Ausdruck von erscheinen anova. Schließlich dividiert er alle seine Mittelquadrate durch die Restvarianz innerhalb der Gruppe sigma(object)^2.

lmeraovlmerRXR00σ2/σf2σf2

Asymptotisch haben die Schätzungen der festen Effekte eine Verteilung:

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

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

Beachten Sie, dass Sie nicht die gleiche F-Statistik erhalten hätten, wenn die Daten nicht ausgeglichen wären. Sie hätten auch nicht die gleiche F-Statistik erhalten, wenn Sie ML anstelle von REML verwendet hätten.

aovσ2σf2σ2σf2

Interessanterweise empfehlen Bates und Pinheiro, die ANOVA zu verwenden, anstatt zwei Modelle anzupassen und einen Likelihood-Ratio-Test durchzuführen. Letzteres neigt dazu, anti-konservativ zu sein.

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

Wie Sie sehen, enthalten die Quadratsummen für die Bewässerungsparameter jetzt auch einen Teil des varietyEffekts.

Placidia
quelle
10
+6, es ist immer schön zu sehen, dass eine alte, unbeantwortete Frage so gut aufgegriffen und beantwortet wird. Möge die Quelle mit dir sein ...
gung - Wiedereinsetzung von Monica