Eu tenho um conjunto de dados de medidas repetidas desequilibrado para analisar e li que a maioria dos pacotes estatísticos lida com isso com ANOVA (ou seja, soma dos quadrados do tipo III) está errada. Portanto, eu gostaria de usar um modelo de efeitos mistos para analisar esses dados. Eu li muito sobre modelos mistos R
, mas ainda sou muito novo R
e modelos de efeito misto e não estou muito confiante de que estou fazendo as coisas corretamente. Observe que ainda não posso me divorciar completamente dos métodos "tradicionais" e ainda preciso de valores- e testes post hoc.
Gostaria de saber se a abordagem a seguir faz sentido ou se estou fazendo algo terrivelmente errado. Aqui está o meu código:
# load packages
library(lme4)
library(languageR)
library(LMERConvenienceFunctions)
library(coda)
library(pbkrtest)
# import data
my.data <- read.csv("data.csv")
# create separate data frames for each DV & remove NAs
region.data <- na.omit(data.frame(time=my.data$time, subject=my.data$subject, dv=my.data$dv1))
# output summary of data
data.summary <- summary(region.data)
# fit model
# "time" is a factor with three levels ("t1", "t2", "t3")
region.lmer <- lmer(dv ~ time + (1|subject), data=region.data)
# check model assumptions
mcp.fnc(region.lmer)
# remove outliers (over 2.5 standard deviations)
rm.outliers <- romr.fnc(region.lmer, region.data, trim=2.5)
region.data <- rm.outliers$data
region.lmer <- update(region.lmer)
# re-check model assumptions
mcp.fnc(region.lmer)
# compare model to null model
region.lmer.null <- lmer(dv ~ 1 + (1|subject), data=region.data)
region.krtest <- KRmodcomp(region.lmer, region.lmer.null)
# output lmer summary
region.lmer.summary <- summary(region.lmer)
# run post hoc tests
t1.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)
region.lmer <- lmer(dv ~ relevel(time,ref="t2") + (1|subject), data=region.data)
t2.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)
region.lmer <- lmer(dv ~ relevel(time,ref="t3") + (1|subject), data=region.data)
t3.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)
# Get mcmc mean and 50/95% HPD confidence intervals for graphs
# repeated three times and stored in a matrix (not shown here for brevity)
as.numeric(t1.pvals$fixed$MCMCmean)
as.numeric(t1.pvals$fixed$HPD95lower)
as.numeric(t1.pvals$fixed$HPD95upper)
HPDinterval(as.mcmc(t1.pvals$mcmc),prob=0.5)
HPDinterval(as.mcmc(t1.pvals$mcmc),prob=0.5)
Algumas perguntas específicas que tenho:
- Essa é uma maneira válida de analisar modelos de efeitos mistos? Caso contrário, o que devo fazer em seu lugar.
- Os gráficos de crítica gerados pelo mcp.fnc são bons o suficiente para verificar as suposições do modelo ou devo tomar medidas adicionais.
- Entendo que, para modelos mistos serem válidos, os dados precisam respeitar suposições de normalidade e homoscedasticidade. Como julgar o que é "aproximadamente normal" e o que não é olhando os gráficos de críticas gerados pelo mcp.fnc? Eu só preciso ter uma idéia disso, ou é uma maneira prescrita de fazer as coisas? Quão robustos são os modelos mistos em relação a essas suposições?
- Preciso avaliar as diferenças entre os três momentos para ~ 20 características (biomarcadores) dos sujeitos da minha amostra. A montagem e o teste de modelos separados para cada um são aceitáveis, desde que eu relate todos os testes realizados (significativos ou não) ou precise de alguma forma de correção para comparações múltiplas.
Para ser um pouco mais preciso em relação ao experimento, aqui estão mais alguns detalhes. Seguimos um número de participantes longitudinalmente, enquanto eles eram submetidos a um tratamento. Medimos vários biomarcadores antes do início do tratamento e em dois momentos. O que eu gostaria de ver é se há diferença nesses biomarcadores entre os três momentos.
Estou baseando a maior parte do que estou fazendo aqui neste tutorial , mas fiz algumas alterações com base nas minhas necessidades e nas coisas que li. As alterações que eu fiz são:
- relevel o fator "time" para obter comparações t1-t2, t2-t3 e t1-t3 com pvals.fnc (do pacote languageR)
- compare meu modelo misto com o modelo nulo usando um teste F aproximado com base na abordagem de Kenward-Roger (usando o pacote pbkrtest) em vez de um teste de razão de verossimilhança (porque eu li que Kenward-Roger é mais bem visto no momento)
- Use o pacote LMERConvenienceFunctions para verificar suposições e remover discrepâncias (porque li que modelos mistos são muito sensíveis a discrepâncias)