Ambos os conceitos mencionados (valores de p e tamanhos de efeito de modelos lineares mistos) têm problemas inerentes. Com relação ao tamanho do efeito , citando Doug Bates, o autor original de lme4
,
R2
Para obter mais informações, você pode olhar para este tópico , este tópico e esta mensagem . Basicamente, a questão é que não existe um método acordado para a inclusão e decomposição da variação dos efeitos aleatórios no modelo. No entanto, existem alguns padrões usados. Se você der uma olhada no Wiki configurado para / pela lista de discussão r-sig-mixed-models , existem algumas abordagens listadas.
Um dos métodos sugeridos analisa a correlação entre os valores ajustados e os observados. Isso pode ser implementado no R, conforme sugerido por Jarrett Byrnes em um desses threads:
r2.corr.mer <- function(m) {
lmfit <- lm(model.response(model.frame(m)) ~ fitted(m))
summary(lmfit)$r.squared
}
Por exemplo, digamos que estimamos o seguinte modelo misto linear:
set.seed(1)
d <- data.frame(y = rnorm(250), x = rnorm(250), z = rnorm(250),
g = sample(letters[1:4], 250, replace=T) )
library(lme4)
summary(fm1 <- lmer(y ~ x + (z | g), data=d))
# Linear mixed model fit by REML ['lmerMod']
# Formula: y ~ x + (z | g)
# Data: d
# REML criterion at convergence: 744.4
#
# Scaled residuals:
# Min 1Q Median 3Q Max
# -2.7808 -0.6123 -0.0244 0.6330 3.5374
#
# Random effects:
# Groups Name Variance Std.Dev. Corr
# g (Intercept) 0.006218 0.07885
# z 0.001318 0.03631 -1.00
# Residual 1.121439 1.05898
# Number of obs: 250, groups: g, 4
#
# Fixed effects:
# Estimate Std. Error t value
# (Intercept) 0.02180 0.07795 0.280
# x 0.04446 0.06980 0.637
#
# Correlation of Fixed Effects:
# (Intr)
# x -0.005
Podemos calcular o tamanho do efeito usando a função definida acima:
r2.corr.mer(fm1)
# [1] 0.0160841
Ω20 0
1-var(residuals(fm1))/(var(model.response(model.frame(fm1))))
# [1] 0.01173721 # Usually, it would be even closer to the value above
Com relação aos valores-p , essa é uma questão muito mais controversa (pelo menos na comunidade R / lme4
). Veja as discussões nas perguntas aqui , aqui e aqui, entre muitas outras. Fazendo referência à página Wiki novamente, existem algumas abordagens para testar hipóteses sobre efeitos em modelos lineares mistos. Listado do "pior ao melhor" (de acordo com os autores da página da Wiki que acredito incluir Doug Bates e Ben Bolker, que contribui muito aqui):
- Testes Z de Wald
- Para LMMs aninhados e balanceados, onde o df pode ser calculado: testes t de Wald
- Teste de razão de verossimilhança, configurando o modelo para que o parâmetro possa ser isolado / eliminado (via
anova
ou drop1
) ou via perfis de verossimilhança de computação
- Intervalos de confiança MCMC ou de parametrização de inicialização
Eles recomendam a abordagem de amostragem Monte Carlo da cadeia de Markov e também listam várias possibilidades para implementá-la a partir de abordagens pseudo e totalmente bayesianas, listadas abaixo.
Pseudo-Bayesiano:
- Amostragem post-hoc, tipicamente (1) assumindo antecedentes planos e (2) partindo do MLE, possivelmente usando a estimativa aproximada de variância-covariância para escolher uma distribuição candidata
- Via
mcmcsamp
(se disponível para o seu problema: por exemplo, LMMs com efeitos aleatórios simples - não GLMMs ou efeitos aleatórios complexos)
Via pvals.fnc
no languageR
pacote, um wrapper para mcmcsamp
)
- No AD Model Builder, possivelmente por meio do
glmmADMB
pacote (use a mcmc=TRUE
opção) ou do R2admb
pacote (escreva sua própria definição de modelo no AD Model Builder) ou fora de R
- Através da
sim
função do arm
pacote (simula o posterior apenas para os coeficientes beta (efeito fixo)
Abordagens totalmente bayesianas:
- Através do
MCMCglmm
pacote
- Usando
glmmBUGS
(uma interface R / wrapper do WinBUGS )
- Usando JAGS / WinBUGS / OpenBUGS etc., através dos
rjags
/ r2jags
/ R2WinBUGS
/ BRugs
packages
Para fins de ilustração, para mostrar como isso pode ser, abaixo é uma MCMCglmm
estimativa usando o MCMCglmm
pacote que você verá produz resultados semelhantes aos do modelo acima e possui algum tipo de valor p Bayesiano:
library(MCMCglmm)
summary(fm2 <- MCMCglmm(y ~ x, random=~us(z):g, data=d))
# Iterations = 3001:12991
# Thinning interval = 10
# Sample size = 1000
#
# DIC: 697.7438
#
# G-structure: ~us(z):g
#
# post.mean l-95% CI u-95% CI eff.samp
# z:z.g 0.0004363 1.586e-17 0.001268 397.6
#
# R-structure: ~units
#
# post.mean l-95% CI u-95% CI eff.samp
# units 0.9466 0.7926 1.123 1000
#
# Location effects: y ~ x
#
# post.mean l-95% CI u-95% CI eff.samp pMCMC
# (Intercept) -0.04936 -0.17176 0.07502 1000 0.424
# x -0.07955 -0.19648 0.05811 1000 0.214
Eu espero que isso ajude de algum jeito. Eu acho que o melhor conselho para alguém que começa com modelos mistos lineares e tenta estimar em R é ler os faqs do Wiki de onde a maioria dessas informações foi extraída. É um excelente recurso para todos os tipos de temas de efeitos mistos, do básico ao avançado, da modelagem à plotagem.
anova()
função para obter uma tabela anova com modelos lineares mistos, assim como nos modelos lineares.