Effects
O pacote fornece uma maneira muito rápida e conveniente de plotar resultados lineares de modelo de efeito misto obtidos através do lme4
pacote . A effect
função calcula intervalos de confiança (ICs) muito rapidamente, mas quão confiáveis são esses intervalos de confiança?
Por exemplo:
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()
De acordo com os ICs calculados usando o effects
pacote, o lote "E" não se sobrepõe ao lote "A".
Se eu tentar o mesmo usando a confint.merMod
função e o método padrão:
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()
Vejo que todos os ICs se sobrepõem. Também recebo avisos indicando que a função falhou ao calcular ICs confiáveis. Este exemplo e meu conjunto de dados real me fazem suspeitar que o effects
pacote usa atalhos no cálculo do IC que podem não ser totalmente aprovados pelos estatísticos. Qual é a confiabilidade dos ICs retornados por effect
função do effects
pacote para lmer
objetos?
O que tentei: Examinando o código-fonte, notei que a effect
função depende da Effect.merMod
função, que por sua vez direciona a Effect.mer
função, que se parece com isso:
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
A função parece calcular a matriz covariável de variância a partir do lmer
objeto:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Isso, por sua vez, provavelmente é usado em Effect.default
função para calcular ICs (eu poderia ter entendido mal esta parte):
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
...
Eu não sei o suficiente sobre LMMs para julgar se essa é uma abordagem correta, mas, considerando a discussão sobre o cálculo do intervalo de confiança para LMMs, essa abordagem parece suspeitamente simples.
Respostas:
Todos os resultados são essencialmente os mesmos ( para este exemplo em particular ). Algumas diferenças teóricas são:
lsmeans
,effects
,confint(.,method="Wald")
; exceto porlsmeans
, esses métodos ignoram efeitos de tamanho finito ("graus de liberdade"), mas, neste caso, quase não faz diferença (df=40
é praticamente indistinguível de infinitodf
)Eu acho que todas essas abordagens são razoáveis (algumas são mais aproximadas que outras), mas nesse caso, quase não faz diferença qual delas você usa. Se estiver preocupado, experimente vários métodos contrastantes nos seus dados ou em dados simulados que se assemelhem aos seus e veja o que acontece ...
(PS: Eu não daria muita importância ao fato de os intervalos de confiança
A
eE
não se sobreporem. Você teria que fazer um procedimento de comparação pareada adequado para fazer inferências confiáveis sobre as diferenças entre esse par de estimativas em particular . ..)ICs de 95%:
Código de comparação:
fonte
effects
sobreposição de pacotes e IC nesse caso?multcomp
pacote, mas requer pelo menos um )Parece que o que você fez no segundo método é ter intervalos de confiança calculados para os coeficientes de regressão e depois transformá-los para obter ICs para as previsões. Isso ignora as covariâncias entre os coeficientes de regressão.
Tente ajustar o modelo sem interceptar, para que os
batch
efeitos sejam realmente as previsões econfint
retorne os intervalos necessários.Adenda 1
Fiz exatamente o que sugeri acima:
Esses intervalos parecem combinar com os resultados de
effects
.Adenda 2
Outra alternativa é o pacote lsmeans . Ele obtém graus de liberdade e uma matriz de covariância ajustada do pacote pbkrtest .
effect
effect
confint
Os resultados de
effect
elsmeans
são semelhantes, mas com uma situação multifatorial desequilibrada,lsmeans
por padrão, calcula a média dos fatores não utilizados com pesos iguais, enquanto oseffect
pesos pelas frequências observadas (disponível como opção emlsmeans
).fonte
effects
pacote podem ser confiáveis paralmer
objetos. Estou pensando em usar os resultados em uma publicação e quero ter certeza de que os ICs são calculados usando um método aprovado para LMMs..sig01
e os resultados.sigma
deconfint
, são esses intervalos de confiança para a variação ? ou intervalo de confiança do desvio padrão ?lmer
uma resposta definitiva. No entanto, as pessoas geralmente usam notações comosigma
se referir a desvios padrão e /sigma.square
ousigma^2
a variações.