anova () 명령은 lmer 모델 객체와 어떤 관계가 있습니까?


30

희망적으로 이것은 여기 누군가가 lmer( lme4 R 패키지에서) 혼합 효과 모델에서 제곱합을 분해하는 성질에 대해 대답 할 수있는 질문입니다 .

우선이 접근법을 사용하는 것에 대한 논쟁에 대해 알고 있다고 말하고 실제로 모델을 비교하기 위해 부트 스트랩 된 LRT를 사용할 가능성이 더 높습니다 (Faraway, 2006). 그러나 결과를 복제하는 방법에 의문이 생겼으므로 제 정신을 위해 여기에 물어볼 것이라고 생각했습니다.

기본적으로 lme4패키지에 맞는 혼합 효과 모델을 사용하는 데 익숙해졌습니다 . 이 anova()명령을 사용 하여 모델에서 수정 된 효과를 순차적으로 테스트하는 요약을 제공 할 수 있다는 것을 알고 있습니다 . 내가 아는 한, Faraway (2006)는 '예상 평균 제곱'접근법이라고합니다. 내가 알고 싶은 것은 제곱의 합이 어떻게 계산됩니까?

특정 모델의 추정 값을 사용하여 (을 사용하여 coef()) 고정 된 것으로 가정 한 다음 관심 요인이 있거나없는 모형 잔차 제곱의 합을 사용하여 테스트를 수행 할 수 있음을 알고 있습니다. 단일 개체-내 요인을 포함하는 모델에 적합합니다. 그러나 분할 플롯 디자인을 구현할 때 내가 얻는 제곱 값의 합은 aov()적절한 Error()지정을 사용하여 R에 의해 생성 된 값과 같습니다 . 그러나 F- 비율이 동일하다는 사실에도 불구하고 모델 객체 의 명령으로 생성 된 제곱합과 동일 하지 않습니다anova() .

물론 이것은 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 비율은 동의합니다. 다양성에 대한 제곱합도 동의합니다. 그러나 관개에 대한 제곱합은 일치하지 않지만 lmer 출력이 조정 된 것으로 보입니다. anova () 명령은 실제로 무엇을합니까?


1
원하는 것을 제공하는 함수 mixed()를 살펴보고 싶을 수도 있습니다 afex(을 통해 method = "PB"). 그리고 완구 데이터로 일부 테스트를 수행 했으므로 데이터 및 코드와 동등한 것을 표시 할 수 있다면 (+1이 아님) 확실히 도움이 될 것입니다.
Henrik

@Henrik Tough crowd ... Martyn, Faraway (2006)에 대한 참조를 줄 수 있습니까?
Patrick Coulombe


@PatrickCoulombe Hehe, 네 말이 맞아. 그러나 때로는 친절한 힘이 더 나은 질문을 얻는 데 도움이됩니다.
Henrik

1
아론은이 책을 참조 할 때 정확합니다. 원래 그것을 제공하지 않은 것에 대해 사과드립니다!
Martyn

답변:


31

출처, 루크를 사용하십시오. 우리는 ANOVA 함수 내부를 들여다 볼 수 있습니다 getAnywhere(anova.Mermod). 이 함수의 첫 번째 부분은 서로 다른 두 모델을 비교하는 것입니다. 고정 효과에 대한 anova는 후반에 큰 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

objectlmer 출력입니다. 우리는 라인 5에서 제곱의 합을 계산하기 시작합니다 ss <- as.vector .... 코드는 고정 된 매개 변수 (in beta)에 상위 삼각 행렬을 곱합니다 . 그런 다음 각 항을 제곱합니다. 다음은 관개 예제를위한 상단 삼각 행렬입니다. 각 행은 5 개의 고정 효과 매개 변수 중 하나에 해당합니다 (절편, 관개 3 자유도, 다양성 1 df).

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 개의 매개 변수 만 포함되므로 사전 곱셈을 사용하면 관개를위한 3 개의 SS 조각이 제공됩니다.

이 조각들은 R의 기본 처리 대비에서 나오기 때문에 그 자체로는 흥미롭지 않지만 라인 ss <- unlist(lapply(split ....Bates에서는 레벨 수와 참조하는 요인에 따라 제곱합을 조금씩 나눕니다. 여기에는 많은 책 관리가 있습니다. 우리는 자유도를 얻습니다 (관개에 3 개). 그런 다음의 출력물에 표시되는 평균 제곱을 얻습니다 anova. 마지막으로, 그는 모든 평균 제곱을 그룹 내 잔차 분산으로 나눕니다 sigma(object)^2.

무슨 일이야? 의 철학은에 lmer의해 사용되는 순간 접근 방식과 아무 관련이 없습니다 aov. 아이디어 lmer는 보이지 않는 무작위 효과를 통합하여 얻은 한계 가능성을 최대화하는 것입니다. 이 경우 각 필드의 무작위 생식 수준. Pinheiro와 Bates의 2 장은이 과정의 추악함을 설명합니다. RX제곱의 합을 얻기 위해 사용되는 행렬은 행렬이다 식 2.17에서, 텍스트의 페이지 (70). 이 행렬은 랜덤 효과와 의 디자인 행렬 (다른 무엇보다도)에서 QR 분해를 통해 얻어집니다 . 여기서 는 전계 효과의 분산입니다. . 이것은 그 누락 요소입니다R00σ2/σf2σf2 당신이 요구했지만 투명하거나 간단한 방법으로 솔루션에 들어 가지 않습니다.

점진적으로 고정 효과의 추정치는 다음과 같은 분포를 갖습니다.

β^N(β,σ2[R001R00T])

이는 의 구성 요소 가 독립적으로 배포 됨을 의미합니다 . 경우 (나눈 해당 용어의 제곱 )가 카이 제곱 분포를 따른다. 의 추정치로 나누는 통해 (다른 카이 제곱으로 나눈 경우 )가 F 통계치를 제공한다. 우리는 그룹 간 분석의 평균 제곱 오차로 나눌 수 없습니다. 왜냐하면 여기에서 일어나고있는 것과는 아무런 관련이 없기 때문입니다. 을 통해 얻은 제곱의 합 을 의 추정치와 비교하여 비교합니다 .R00β^β=0σ2σ2σ2R00σ2

데이터의 균형이 맞지 않았다면 동일한 F 통계량을 얻지 못했을 것입니다. REML 대신 ML을 사용했다면 동일한 F 통계를 얻지 못했을 것입니다.

아이디어 aov는 관개에 필요한 평균 제곱이 , 및 관개 효과 의 함수라는 것입니다 . 필드 잔차에 대한 예상 평균 제곱은 및 의 함수입니다 . 관개 효과가 0 일 때,이 양들은 모두 같은 것을 추정하고 그 비율은 F 분포를 따릅니다.σ2σf2σ2σf2

흥미롭게도 Bates와 Pinheiro는 두 모델에 적합하고 우도 비 검정을 수행하는 것보다 분산 분석을 사용하는 것이 좋습니다. 후자는 반 보수적 인 경향이 있습니다.

물론, 데이터의 균형이 맞지 않으면 분산 분석에서 어떤 가설을 검증하는지 더 이상 명확하지 않습니다. 관개 데이터에서 첫 번째 관찰을 제거하고 다시 장착했습니다. 매트릭스 는 다음과 같습니다 .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-복원 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.