Исправление случайных уклонов и случайных значений перехватов в lme4

В настоящее время я пытаюсь рассчитать размер эффекта (f^2 Коэна) данного эффекта, но мне нужно запустить нулевую и частичную модель со случайными эффектами, предварительно определенными для этого (в соответствии с Selya et al., 2012 для работы с непрерывными предикторами). Селя и соавт. набросать код, необходимый для этого в SAS, но я пытаюсь выяснить, как это сделать в R.

Когда я использовал последний фрагмент кода из предыдущего аналогичного вопроса, я продолжал получать сообщение об ошибке, что thetas не совпадают ("3!=4"). Я думаю, что проблема возникает из-за того, что моя оригинальная модель имеет межуровневый термин взаимодействия, в то время как предыдущий пост имеет только случайные перехваты. Я не просто пытаюсь держать постоянными случайные эффекты на пересечении, но также и случайные эффекты наклона. Как я могу изменить код для запуска? Я позвонил getME функция с "theta" и действительно увидел, что мой mod3b Модель имеет 4 тэта-значения, поэтому мне нужно добавить еще один параметр-параметр в код. Я просто не могу понять, как получить дисперсию четвертого тэта-термина в моем исходном выводе. Я ценю любую помощь!

Вот моя оригинальная перекрестно классифицированная модель со случайными наклонами и случайными перехватами:

mod3b <- lmer(FitBelong~Condition*Gender + 
  (1+Condition|ResponseID) + (1|Stimuli), 
data=LFS1Ensemble, REML=TRUE)
summary(mod3b)

Я адаптировал код из ответа по ссылке так:

#Effect size of interaction#
buildMM <- function(theta) {
  dd <- as.function(mod3b)
  ff <- dd(theta)
  opt <- list(par=c(0,0,0),fval=ff,conv=0)
  mm <- mkMerMod(environment(dd), opt, lmod$reTrms, fr = lmod$fr,
             mc = quote(hacked_lmer()))
 return(mm)
}

objfun <- function(x,target=c(3.92244,0.08805,0.09683)) {
mm <- buildMM(sqrt(x))
return(sum((unlist(VarCorr(mm))-target)^2))
}

s0 <- c(3.92244,0.08805,0.09683)/sigma(mod3b)^2
opt <- optim(fn=objfun,par=s0)
mm_final <- buildMM(sqrt(opt$par))
summary(mm_final)

Выдает ошибку: "Ошибка: несоответствие размера тета"

Когда я делаю трассировку, это дает мне:

6 stop(structure(list(message = "theta size mismatch", call = NULL, 
    cppstack = NULL), .Names = c("message", "call", "cppstack"
), class = c("std::invalid_argument", "C++Error", "error", "condition"
))) 
5 dd(theta) 
4 buildMM(sqrt(x)) 
3 fn(par, ...) 
2 (function (par) 
fn(par, ...))(c(2.1571475240413, 0.0484231344499436, 0.0532516991344468
)) 
1 optim(fn = objfun, par = s0) 

Любая помощь очень ценится!

0 ответов

Другие вопросы по тегам