Що робить команда anova () з об'єктом моделі lmer?


30

Сподіваюсь, це питання, на який хтось тут може відповісти за мене про характер розкладання сум квадратів у моделі змішаних ефектів, що відповідає lmer(з пакету lme4 R).

По-перше, я повинен сказати, що мені відомо про суперечки з використанням цього підходу, і на практиці я з більшою ймовірністю використовую завантажений LRT для порівняння моделей (як це запропонував Faraway, 2006). Однак я здивований, як повторити результати, і тому для власної розумності я думав, що запитаю тут.

В основному, я переживаю використання моделей зі змішаними ефектами, що підходять до lme4пакету. Я знаю, що ви можете використовувати anova()команду, щоб дати короткий підсумок послідовного тестування фіксованих ефектів у моделі. Наскільки мені відомо, саме так називається Faraway (2006) як підхід «Очікувані середні квадрати». Що я хочу знати, як обчислюються суми квадратів?

Я знаю, що я міг взяти оцінені значення з певної моделі (використовуючи coef()), припустити, що вони фіксовані, а потім зробити тести, використовуючи суми квадратів залишків моделі з факторами, що цікавлять, і без них. Це добре для моделі, що містить єдиний коефіцієнт, що входить до теми. Однак, реалізуючи проект розбиття на графік, отримане значення значень квадратів дорівнює значенню, отриманому R, використовуючи aov()відповідне Error()позначення. Однак це не те саме, що суми квадратів, отримані anova()командою на об'єкті моделі, незважаючи на те, що коефіцієнти F є однаковими.

Звичайно, це має повний сенс, оскільки Error()в змішаній моделі немає потреби в шарах. Однак це повинно означати, що суми квадратів певною мірою штрафуються в змішаній моделі, щоб забезпечити відповідні F-співвідношення. Як це досягається? І як модель якось виправляє між квадратом суму квадратів, але не виправляє внутрішньодіапазонну суму квадратів. Очевидно, що це є необхідним для класичного ANOVA-розділеного сюжету, що було досягнуто шляхом позначення різних значень помилок для різних ефектів, то як модель змішаного ефекту дозволяє це зробити?

В основному, я хочу вміти повторювати результати anova()команди, застосованої до об'єкта lmer моделі, щоб перевірити результати та своє розуміння, однак, на даний момент я можу досягти цього для нормальної внутрішньої теми, але не для розділення- Сюжетний дизайн, і я, здається, не можу з’ясувати, чому це так.

Як приклад:

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               

Як видно, всі F-коефіцієнти згодні. Суми квадратів для різноманітності також погоджуються. Однак суми квадратів для поливу не узгоджуються, однак, схоже, випуск лімерів масштабується. Отже, що насправді робить команда anova ()?


1
Ви могли б хотіти поглянути на функції mixed()з afexякої пропонує те , що ви хочете ( з допомогою method = "PB"). І оскільки ви, очевидно, зробили тестування з даними іграшок, це, безумовно, буде корисно, якщо ви зможете показати ці еквіваленти з даними та кодом (отже, не +1).
Генрік

@Henrik Жорсткий натовп ... Мартине, чи не могли б ви дати довідку про Faraway (2006)?
Патрік Куломбе


@PatrickCoulombe Hehe, ти маєш рацію. Але іноді якась доброзичлива сила допомагає отримати кращі запитання.
Генрік

1
Аарон правильний у книжковій справі, вибачте за те, що не надав його спочатку!
Мартін

Відповіді:


31

Використовуйте джерело, Лука. Ми можемо зазирнути до функції ANOVA, виконуючи getAnywhere(anova.Mermod). Перша частина цієї функції полягає у порівнянні двох різних моделей. Анова щодо фіксованих ефектів виходить у великий elseблок у другій половині:

 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- вихід лімера. Почнемо обчислювати суму квадратів у рядку 5: ss <- as.vector ...Код множить фіксовані параметри (в beta) на верхню трикутну матрицю; потім квадрати кожного доданка. Ось ця верхня трикутна матриця для прикладу зрошення. Кожен рядок відповідає одному з п’яти параметрів фіксованого впливу (перехоплення, 3 ступеня свободи для зрошення, 1 дф для різноманітності).

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

Перший рядок дає вам суму квадратів для перехоплення, а останній дає SS для ефекту різноманітності всередині полів. У рядках 2-4 містяться лише 3 параметри для рівнів поливу, тому попереднє розмноження дає три частини СС для поливу.

Ці шматки самі по собі не цікаві, оскільки вони походять від контрасту лікування за замовчуванням у R, але в рядку ss <- unlist(lapply(split ....Бейтс збирає шматочки сум у квадрати відповідно до кількості рівнів та до яких факторів вони посилаються. Тут ведеться велика кількість бухгалтерій. Ми також отримуємо ступеня свободи (які для поливу 3). Потім він отримує середні квадрати, які відображаються на роздруківці anova. Нарешті, він ділить всі свої кошти квадратів внутріплітнимі груп залишкової дисперсії, sigma(object)^2.

lmeraovlmerRXR00σ2/σf2σf2

Асимптотично, оцінки фіксованих ефектів мають розподіл:

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

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

Зауважте, що у вас не було б тієї самої статистики F, якби дані не були збалансовані. Ви також не отримали б ту саму статистику F, якби ви використовували ML замість REML.

aovσ2σf2σ2σf2

Цікаво, що Бейтс і Піньейро рекомендують використовувати ANOVA над встановленням двох моделей і робити тест на ймовірність. Останній, як правило, антиконсервативний.

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

Як бачимо, суми квадратів для параметрів поливу тепер містять і деякий varietyефект.


10
+6, завжди приємно бачити, як старе питання без відповіді так добре підібрано та відповіли. Нехай джерело буде з вами ...
gung - Відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.