Effects
package 는 package 를 통해 얻은 선형 혼합 효과 모델 결과 를 플로팅 하기위한 매우 빠르고 편리한 방법을 제공 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가 반환되는 신뢰도는 어느 정도 입니까?effect
effects
lmer
내가 시도한 것 : 소스 코드를 살펴보면 effect
함수 가 함수에 의존 한다는 것을 알았습니다.이 함수 Effect.merMod
는 Effect.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.default
CI를 계산 하는 기능에 사용될 것입니다 (이 부분을 오해했을 수도 있습니다).
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에 대한 신뢰 구간 계산에 대한 논의를 고려할 때이 접근법은 의심스럽게 단순 해 보입니다.