J'ai un ensemble de données de mesures répétées déséquilibrées à analyser, et j'ai lu que la façon dont la plupart des progiciels statistiques traitent cela avec l'ANOVA (c'est-à-dire la somme des carrés de type III) est erronée. Par conséquent, je voudrais utiliser un modèle à effets mixtes pour analyser ces données. J'ai beaucoup lu sur les modèles mixtes R
, mais je suis encore très nouveau sur R
les modèles à effets mixtes et je ne suis pas très confiant de bien faire les choses. Notez que je ne peux pas encore me séparer complètement des méthodes "traditionnelles", et j'ai toujours besoin de valeurs et de tests post hoc.
Je voudrais savoir si l'approche suivante a du sens ou si je fais quelque chose d'horriblement mal. Voici mon code:
# 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)
Quelques questions spécifiques que j'ai:
- Est-ce une façon valable d'analyser des modèles à effets mixtes? Sinon, que dois-je faire à la place.
- Les tracés de critique produits par mcp.fnc sont-ils assez bons pour vérifier les hypothèses du modèle, ou devrais-je prendre des mesures supplémentaires.
- Je comprends que pour que les modèles mixtes soient valides, les données doivent respecter les hypothèses de normalité et d'homoscédasticité. Comment puis-je juger ce qui est "approximativement normal" et ce qui ne l'est pas en examinant les complots de critiques générés par mcp.fnc? Ai-je simplement besoin de me faire une idée ou est-ce une façon prescrite de faire les choses? Quelle est la robustesse des modèles mixtes par rapport à ces hypothèses?
- J'ai besoin d'évaluer les différences entre les trois points dans le temps pour environ 20 caractéristiques (biomarqueurs) des sujets de mon échantillon. Est-ce que l'ajustement et le test de modèles distincts pour chacun sont acceptables tant que je signale tous les tests entrepris (significatifs ou non), ou ai-je besoin d'une forme de correction pour les comparaisons multiples.
Pour être un peu plus précis en ce qui concerne l'expérience, voici quelques détails supplémentaires. Nous avons suivi un certain nombre de participants longitudinalement pendant qu'ils subissaient un traitement. Nous avons mesuré un certain nombre de biomarqueurs avant le début du traitement et à deux moments dans le temps après. Ce que j'aimerais voir, c'est s'il y a une différence dans ces biomarqueurs entre les trois points dans le temps.
Je base la plupart de ce que je fais ici sur ce tutoriel , mais j'ai apporté quelques modifications en fonction de mes besoins et des choses que j'ai lues. Les modifications que j'ai apportées sont les suivantes:
- relever le facteur "temps" pour obtenir les comparaisons t1-t2, t2-t3 et t1-t3 avec pvals.fnc (à partir du package languageR)
- comparer mon modèle mixte au modèle nul en utilisant un test F approximatif basé sur une approche de Kenward-Roger (en utilisant le package pbkrtest) plutôt qu'un test de rapport de vraisemblance (parce que j'ai lu, que Kenward-Roger est mieux considéré en ce moment)
- Utilisez le package LMERConvenienceFunctions pour vérifier les hypothèses et supprimer les valeurs aberrantes (car j'ai lu que les modèles mixtes sont très sensibles aux valeurs aberrantes)