У меня есть несбалансированный набор данных повторных измерений для анализа, и я прочитал, что большинство статистических пакетов обрабатывают это с помощью ANOVA (т.е. сумма квадратов типа III) неверно. Поэтому я хотел бы использовать модель смешанных эффектов для анализа этих данных. Я много читал о смешанных моделях R
, но я все еще очень R
плохо знаком с моделями со смешанным эффектом и не очень уверен, что все делаю правильно. Обратите внимание, что я пока не могу полностью отделиться от «традиционных» методов, и мне все еще нужны и специальные тесты.
Я хотел бы знать, имеет ли смысл следующий подход или я делаю что-то ужасно неправильное. Вот мой код:
# 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)
У меня есть несколько конкретных вопросов:
- Это правильный способ анализа моделей со смешанными эффектами? Если нет, то что я должен делать вместо этого.
- Достаточно ли хороши выходные графики критики mcp.fnc для проверки предположений модели или я должен предпринять дополнительные шаги?
- Я понимаю, что для того, чтобы смешанные модели были достоверными, данные должны учитывать предположения о нормальности и гомоскедастичности. Как определить, что является «приблизительно нормальным», а что нет, взглянув на графики критики, сгенерированные mcp.fnc? Мне просто нужно почувствовать это, или это предписанный способ делать вещи? Насколько надежны смешанные модели в отношении этих предположений?
- Мне нужно оценить различия между тремя временными точками для ~ 20 характеристик (биомаркеров) субъектов в моем образце. Подходит и тестирует ли отдельные модели для каждой приемлемой, пока я сообщаю обо всех проведенных тестах (значимых или нет), или мне нужна какая-либо форма коррекции для множественных сравнений.
Чтобы быть немного более точным в отношении эксперимента, вот еще несколько деталей. Мы следили за несколькими участниками в продольном направлении, когда они проходили лечение. Мы измерили количество биомаркеров до начала лечения и в двух временных точках после. Я хотел бы видеть, есть ли разница в этих биомаркерах между тремя временными точками.
Я основываю большую часть того, что я делаю здесь, на этом уроке , но внес некоторые изменения в зависимости от моих потребностей и прочитанного. Изменения, которые я сделал:
- повторно использовать фактор времени для получения сравнений t1-t2, t2-t3 и t1-t3 с pvals.fnc (из пакета languageR)
- сравните мою смешанную модель с нулевой моделью, используя приблизительный F-тест, основанный на подходе Кенварда-Роджера (с использованием пакета pbkrtest), а не тест отношения правдоподобия (потому что я читал, что Кенварда-Роджера лучше рассматривать прямо сейчас)
- Используйте пакет LMERConvenienceFunctions, чтобы проверить предположения и удалить выбросы (потому что я читал, что смешанные модели очень чувствительны к выбросам)