2016-03-11 2 views
2

При установке модели смешанных эффектов (или любой другой модели) часто бывает полезно предсказать «встречные» установленные значения, используя новые данные или новые параметры модели. В моей ситуации я хотел бы предсказать установленные значения новыми случайными эффектами.Предсказывать новые случайные эффекты

Пакет lme4 позволяет вставлять новые параметры, которые будут использоваться вместо слотов merMod класса beta, theta и sigma. Это позволило бы прогнозировать установленные значения в соответствии с коэффициентами с фиксированными коэффициентами. Как я могу сделать то же самое для оценок случайных эффектов?

Моя первая мысль заключалась в том, чтобы непосредственно изменить слот u объекта merMod, но это, кажется, ничего не делает. Что я могу сделать?

Пример кода:

library(lme4) 

# use sleepstudy example 
fm1 <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy) 

# estimate predictions 
fm1Predictions <- predict(fm1) 

# estimate predictions with new fixed effects (arbitrarily set to 10) 
cfPredictions <- predict(fm1, newparams=list('theta'=10)) # different than fm1Predictions 

# estimate predictions with new random effects 
fm2 <- fm1 
[email protected] <- rep(10,length([email protected])) 
fm2Predictions <- predict(fm2) # same as fm1Predictions 
+0

Можете ли вы предоставить более подробную информацию - хотите ли вы указать коэффициент для отдельного уровня группировки, или вы хотите указать/изменить параметр, который определяет распределение группировки терминов? – jknowles

+0

Спасибо за ваш ответ. Бывший. Я хочу указать новый вектор коэффициентов для отдельных уровней группировки ('fm @ u'), как показано во второй-последней строке примера. Я хочу «притворяться», что вместо оценочных коэффициентов группового уровня были разные коэффициенты группового уровня. – dmp

ответ

1

Это не самое элегантное решение, но оно может работать в то же время.

Используя merTools, вы можете вернуть компоненты прогнозируемого значения из многоуровневой модели в data.frame.

library(merTools) 
fm1 <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy) 
predInt2 <- predictInterval(fm1, which = "all", seed = 8231, 
         include.resid.var = TRUE) 

Указания which = "all" означает, что компоненты прогнозируемого значения возвращаются в дополнении к полному прогнозируемому значению.

predInt2[predInt2$obs == 3,] 

Возвращает:

 effect  fit  upr   lwr obs 
3 combined 313.16116 353.33704 268.5411738 3 
183 Subject 40.02862 83.56716 -0.8552207 3 
363 fixed 272.02953 313.85544 230.8799770 3 

Этот data.frame показывает вам прогнозируемое значение для наблюдения 3 из данных sleepstudy с разбивкой по случайной составляющей для Subject, в fixed компонента, а также комбинированные.

Вы можете перекомпоновать эффект combined, суммируя эффект fixed и некоторое противофажное значение для Subject. Это не поддерживается непосредственно функцией в R, но с небольшим количеством манипуляций с данными вы можете сделать:

counter_fact <- predInt2[predInt2$effect == "fixed", ] 
counter_fact$est <- counter_fact$fit + 20 
head(counter_fact) 

И теперь у вас есть оценочное значение, если случайная составляющая была постоянной с эффектом 20 для всех наблюдений.

+0

Интересно. Какую версию 'merTools' вы используете? Я не вижу опции для 'which' в' predictInterval' здесь http://127.0.0.1:22608/library/merTools/html/predictInterval.html (и я получаю ошибку "неиспользуемый аргумент (which =" all ")) – dmp

+1

Обновление до версии 0.3.0 или использование версии для разработки. Я автор пакета, поэтому я всегда использую версию dev :-) – jknowles