효과 패키지를 통해 lmer 객체의 신뢰 구간은 얼마나 신뢰할 수 있습니까?


36

Effectspackagepackage 를 통해 얻은 선형 혼합 효과 모델 결과플로팅 하기위한 매우 빠르고 편리한 방법을 제공 lme4합니다 . 이 effect함수는 신뢰 구간 (CI)을 매우 빠르게 계산하지만 이러한 신뢰 구간은 얼마나 신뢰할 수 있습니까?

예를 들면 다음과 같습니다.

library(lme4)
library(effects)
library(ggplot)

data(Pastes)

fm1  <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) + 
  geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
        ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

여기에 이미지 설명을 입력하십시오

effects패키지를 사용하여 계산 된 CI에 따르면 배치 "E"는 배치 "A"와 겹치지 않습니다.

confint.merMod함수와 기본 방법을 사용하여 동일하게 시도하면 :

a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)

b <- data.frame(b)
b <- b[-1:-2,]

b1 <- b[[1]]
b2 <- b[[2]]

dt <- data.frame(fit   = c(a[1],  a[1] + a[2:length(a)]), 
                 lower = c(b1[1],  b1[1] + b1[2:length(b1)]), 
                 upper = c(b2[1],  b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]

ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
  geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"], 
        ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") + 
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

여기에 이미지 설명을 입력하십시오

모든 CI가 겹치는 것을 볼 수 있습니다. 또한 함수가 신뢰할 수있는 CI를 계산하지 못했다는 경고가 표시됩니다. 이 예제와 실제 데이터 세트를 통해 effects패키지가 CI 계산에서 통계 전문가가 완전히 승인하지 않은 바로 가기 를 사용한다고 의심합니다 . 객체에 대한 패키지 에서 함수에 의해 CI가 반환되는 신뢰도는 어느 정도 입니까?effecteffectslmer

내가 시도한 것 : 소스 코드를 살펴보면 effect함수 가 함수에 의존 한다는 것을 알았습니다.이 함수 Effect.merModEffect.mer다음과 같이 함수를 지시합니다 .

effects:::Effect.mer
function (focal.predictors, mod, ...) 
{
    result <- Effect(focal.predictors, mer.to.glm(mod), ...)
    result$formula <- as.formula(formula(mod))
    result
}
<environment: namespace:effects>

mer.to.glm함수는 lmer객체 에서 분산 공변량 행렬을 계산하는 것 같습니다 .

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

차례로 이것은 아마도 Effect.defaultCI를 계산 하는 기능에 사용될 것입니다 (이 부분을 오해했을 수도 있습니다).

effects:::Effect.default
...
     z <- qnorm(1 - (1 - confidence.level)/2)
        V <- vcov.(mod)
        eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
        rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
        var <- diag(eff.vcov)
        result$vcov <- eff.vcov
        result$se <- sqrt(var)
        result$lower <- effect - z * result$se
        result$upper <- effect + z * result$se
...

이것이 올바른 접근법인지 판단하기 위해 LMM에 대해 충분히 알지 못하지만 LMM에 대한 신뢰 구간 계산에 대한 논의를 고려할 때이 접근법은 의심스럽게 단순 해 보입니다.


1
코드 줄이 길면 여러 줄로 나눠서 스크롤하면 스크롤 할 필요가 없습니다.
rvl

1
@rvl 이제 코드를 더 읽기 쉽게해야합니다.
Mikko

답변:


52

모든 결과는 본질적으로 동일합니다 ( 이 특정 예의 경우 ). 이론적 인 차이점은 다음과 같습니다.

  • @rvl이 지적했듯이 매개 변수 간의 공분산을 고려하지 않고 CI를 재구성하는 것은 잘못되었습니다 (죄송합니다)
  • 파라미터에 대한 신뢰 구간은 (a 차 로그 우도면을 가정) 왈드 신뢰 구간에 기초 할 수있다 : lsmeans, effects, confint(.,method="Wald"); 를 제외하고 lsmeans,이 방법은 유한 크기 효과 ( "자유도")를 무시하지만이 경우 거의 차이가 없습니다 ( df=40실제로는 무한과 구별 할 수 없음 df).
  • ... 또는 프로파일 신뢰 구간 (기본 방법; 유한 크기 효과는 무시하지만 2 차 표면이 아닌 표면은 허용)
  • ... 또는 파라 메트릭 부트 스트랩 (골드 표준-모델이 올바른 것으로 가정 (응답은 정상, 랜덤 효과는 정규 분포, 데이터는 조건부 독립적 임 등), 그렇지 않은 경우 거의 가정하지 않음)

나는이 모든 접근 방식이 합리적 이라고 생각하지만 (일부는 다른 것보다 더 근사합니다),이 경우 사용하는 방법과 거의 차이가 없습니다. 우려되는 경우 데이터 또는 자신과 유사한 시뮬레이션 데이터에 대해 몇 가지 대조적 인 방법을 시도하고 어떤 일이 발생하는지 확인하십시오 ...

(PS : 신뢰 구간 AE겹치지 않는다는 사실에 너무 많은 가중치를 두지 않을 것입니다.이 특정 추정값 쌍의 차이에 대한 확실한 추론을하려면 적절한 쌍별 비교 절차를 수행해야합니다 . ..)

95 % CI :

여기에 이미지 설명을 입력하십시오

비교 코드 :

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2
나는이 대답이 요점에 맞으므로 다른 방법들 사이의 훌륭한 비교를 제공합니다. 그러나 자세한 내용은 rlv의 훌륭한 답변을 확인하십시오.
Mikko

우수하고 매우 유용한 답변에 감사드립니다. CI를 사용하여 그룹 / 배치를 비교할 수는 없지만 효과를 비교할 수 있다는 것을 올바르게 알고 있습니까? 내가 두 개인, 여러 개인과 개인 내에서 여러 측정을했다고 가정 해보십시오. 나는 각각이 x 측정 값을 포함하는 것처럼 임의의 효과로 개인을 사용할 것입니다. 그런 다음이 두 치료법이 다른 반응을 보 였는지 알고 싶었습니다. effects이 경우 패키지와 CI 오버랩을 사용할 수 있습니까?
Mikko

5
이것은 표준 모델 기반 접근 방식과 관련된보다 일반적인 질문입니다. 별도의 질문이있을 수 있습니다. (1) 일반적으로 치료 간의 차이에 대한 질문에 대답하는 방법은 초점 치료 간의 차이가 모델의 대비 (예 : 추정 된 매개 변수)가되도록 모델을 설정 한 다음 p- 값을 계산하는 것입니다. 또는 특정 알파 수준의 신뢰 구간에 0이 포함되어 있는지 확인하십시오. (계속)
Ben Bolker 18

4
(2) 겹치는 CI는 매개 변수 간의 차이에 대한 보수적이고 근사한 기준입니다. (3) 쌍별 비교에는 별개의 / 직교적인 문제가 있는데, 이는 비교의 다중성 및 비 독립성을 적절하게 제어해야한다는 것입니다 ( 예 : 패키지 의 방법으로 수행 multcomp있지만 적어도 약간의 관리)
Ben Bolker

1
무엇을 위해? 새로운 질문을하고 싶을 수도 있습니다.
벤 볼커

20

두 번째 방법에서 수행 한 작업은 회귀 계수에 대한 신뢰 구간을 계산 한 다음 예측에 대한 CI를 얻기 위해이를 신뢰하는 것입니다. 회귀 계수 간의 공분산은 무시합니다.

절편없이 모형을 피팅하여 batch효과가 실제로 예측이되도록하고 confint필요한 구간을 반환합니다.

부록 1

위에서 제안한대로 정확하게 수행했습니다.

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

이 간격은의 결과와 함께 흔들리는 것 같습니다 effects.

부록 2

또 다른 대안은 lsmeans 패키지입니다. pbkrtest 패키지 에서 자유도 및 조정 된 공분산 행렬을 얻습니다 .

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

effecteffectconfint±1.96×se

의 결과 effectlsmeans유사하지만, 불균형 다중 요소 상황과 lsmeans동일한 가중치를 사용하지 않는 요소를 통해 기본 평균으로, 반면 effect(에 옵션으로 사용할 수있는 관찰 된 주파수에 의해 무게 lsmeans).


이 솔루션에 감사드립니다. 정확히 같지는 않지만 간격이 더 유사 해졌습니다. effects패키지의 CI 를 lmer객체에 대해 신뢰할 수 있는지 여부에 대한 답은 여전히 ​​그렇습니다 . 결과를 출판물에 사용하는 것을 고려하고 있으며 LMM에 대해 승인 된 방법을 사용하여 CI를 계산하고 싶습니다.
Mikko

부록 1에서 처음 두 개의 모수 .sig01와으로 .sigma생성되는 변이에confint 대한 신뢰 구간은 무엇입니까? 또는 표준 편차 의 신뢰 구간 ?
ABC

모델에서 그런 식으로 레이블이 지정된 매개 변수에 대한 CI입니다. lmer결정적인 답변 은 설명서를 참조하십시오 . 그러나 사람들은 일반적으로 sigma표준 편차 sigma.square또는 sigma^2분산을 나타내는 것과 같은 표기법 을 사용합니다.
rvl

lmertest, lsmeans 또는 mertools를 사용하는 것이 더 낫습니까?
skan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.