Рассмотрим данные сна, включенные в lme4. Бейтс обсуждает это в своей онлайн- книге о lme4. В главе 3 он рассматривает две модели данных.
M0 : Реакция ∼ 1 + Дни + ( 1 | Тема ) + ( 0 + Дни | Тема )
а также
MA : Реакция ∼ 1 + Дни + ( Дни | Тема )
В исследовании приняли участие 18 субъектов, изученных в течение 10 дней без сна. Время реакции рассчитывали в начале и в последующие дни. Существует четкий эффект между временем реакции и продолжительностью лишения сна. Есть также значительные различия между предметами. Модель А допускает возможность взаимодействия между случайным перехватом и эффектами наклона: представьте, скажем, что люди с плохим временем реакции более остро страдают от последствий лишения сна. Это предполагает положительную корреляцию в случайных эффектах.
В примере Бейтса не было очевидной корреляции с графиком решетки и не было существенного различия между моделями. Однако, чтобы исследовать вопрос, поставленный выше, я решил взять подходящие значения сна, изучить корреляцию и посмотреть на производительность двух моделей.
Как видно из изображения, длительное время реакции связано с большей потерей производительности. Корреляция, использованная для моделирования, составила 0,58.
Я смоделировал 1000 образцов, используя метод имитации в Ime4, на основе установленных значений моих искусственных данных. Я подгоняю M0 и Ma к каждому и смотрю на результаты. Исходный набор данных содержал 180 наблюдений (по 10 для каждого из 18 субъектов), и моделируемые данные имеют такую же структуру.
Суть в том, что разница очень мала.
- Фиксированные параметры имеют одинаковые значения в обеих моделях.
- Случайные эффекты немного отличаются. Для каждой моделируемой выборки имеется 18 случайных эффектов перехвата и 18 наклонов. Для каждой выборки эти эффекты вынуждены прибавлять к 0, что означает, что среднее различие между двумя моделями равно (искусственно) 0. Но различия и ковариации различаются. Медиана ковариации при МА составила 104, против 84 при М0 (фактическое значение 112). Дисперсии наклонов и пересечений были больше при M0, чем MA, по-видимому, чтобы получить дополнительное пространство для маневра, необходимое в отсутствие параметра свободной ковариации.
- Метод ANOVA для lmer дает F-статистику для сравнения модели наклона с моделью только со случайным перехватом (без эффекта из-за лишения сна). Очевидно, что это значение было очень большим для обеих моделей, но обычно оно было (но не всегда) больше для МА (среднее значение 62 против среднего значения 55).
- Ковариация и дисперсия фиксированных эффектов различны.
- Примерно в половине случаев он знает, что МА правильно. Среднее значение p для сравнения M0 с MA составляет 0,0442. Несмотря на наличие значимой корреляции и 180 сбалансированных наблюдений, правильная модель будет выбрана только примерно в половине случаев.
- Прогнозируемые значения отличаются для двух моделей, но очень незначительно. Средняя разница между прогнозами составляет 0, с SD 2,7. Sd самих предсказанных значений составляет 60,9
Так почему это происходит? @ Ганг обоснованно предположил, что отсутствие возможности корреляции приводит к некоррелированию случайных эффектов. Возможно, так и должно быть; но в этой реализации допускается корреляция случайных эффектов, а это означает, что данные могут выводить параметры в правильном направлении, независимо от модели. Неправильность неправильной модели проявляется в вероятности, поэтому вы можете (иногда) различать две модели на этом уровне. Модель смешанных эффектов в основном подгоняет линейные регрессии к каждому субъекту под влиянием того, что, по мнению модели, должно быть. Неправильная модель приводит к подгонке менее вероятных значений, чем при правильной модели. Но параметры, в конце концов, зависят от соответствия фактическим данным.
Вот мой несколько неуклюжий код. Идея заключалась в том, чтобы подогнать данные исследования сна, а затем создать имитированный набор данных с теми же параметрами, но с большей корреляцией для случайных эффектов. Этот набор данных был передан в simulate.lmer () для имитации 1000 образцов, каждый из которых подходил в обоих направлениях. После того, как я соединил подгоненные объекты, я мог извлечь различные особенности подгонки и сравнить их, используя t-тесты или что-то еще.
# Fit a model to the sleep study data, allowing non-zero correlation
fm01 <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=sleepstudy, REML=FALSE)
# Now use this to build a similar data set with a correlation = 0.9
# Here is the covariance function for the random effects
# The variances come from the sleep study. The covariance is chosen to give a larger correlation
sigma.Subjects <- matrix(c(565.5,122,122,32.68),2,2)
# Simulate 18 pairs of random effects
ranef.sim <- mvrnorm(18,mu=c(0,0),Sigma=sigma.Subjects)
# Pull out the pattern of days and subjects.
XXM <- model.frame(fm01)
n <- nrow(XXM) # Sample size
# Add an intercept to the model matrix.
XX.f <- cbind(rep(1,n),XXM[,2])
# Calculate the fixed effects, using the parameters from the sleep study.
yhat <- XX.f %*% fixef(fm01 )
# Simulate a random intercept for each subject
intercept.r <- rep(ranef.sim[,1], each=10)
# Now build the random slopes
slope.r <- XXM[,2]*rep(ranef.sim[,2],each=10)
# Add the slopes to the random intercepts and fixed effects
yhat2 <- yhat+intercept.r+slope.r
# And finally, add some noise, using the variance from the sleep study
y <- yhat2 + rnorm(n,mean=0,sd=sigma(fm01))
# Here is new "sleep study" data, with a stronger correlation.
new.data <- data.frame(Reaction=y,Days=XXM$Days,Subject=XXM$Subject)
# Fit the new data with its correct model
fm.sim <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=new.data, REML=FALSE)
# Have a look at it
xyplot(Reaction ~ Days | Subject, data=new.data, layout=c(6,3), type=c("p","r"))
# Now simulate 1000 new data sets like new.data and fit each one
# using the right model and zero correlation model.
# For each simulation, output a list containing the fit from each and
# the ANOVA comparing them.
n.sim <- 1000
sim.data <- vector(mode="list",)
tempReaction <- simulate(fm.sim, nsim=n.sim)
tempdata <- model.frame(fm.sim)
for (i in 1:n.sim){
tempdata$Reaction <- tempReaction[,i]
output0 <- lmer(Reaction ~ 1 + Days +(1|Subject)+(0+Days|Subject), data = tempdata, REML=FALSE)
output1 <- lmer(Reaction ~ 1 + Days +(Days|Subject), data=tempdata, REML=FALSE)
temp <- anova(output0,output1)
pval <- temp$`Pr(>Chisq)`[2]
sim.data[[i]] <- list(model0=output0,modelA=output1, pvalue=pval)
}