修复lme4

时间:2017-01-27 23:55:36

标签: r lme4 random-effects mlm

我目前正在尝试计算给定效果的效果大小(Cohen的f ^ 2),但是需要运行具有预先指定的随机效果的null和部分模型(根据Selya等人的说法) 。,2012年用于处理连续预测因子)。 Selya等人。在SAS中概述了这样做的必要代码,但我想弄清楚如何在R中做到这一点。

当我使用prior similar question中的最后一段代码时,我不断得到那些不匹配的错误(“3!= 4”)。我认为问题出现是因为我的原始模型具有跨级交互术语,而先前的帖子只有随机截取。我不只是试图保持对截距的随机效应以及斜率的随机效应。如何修改代码以使其运行?我用getME调用"theta"函数,确实看到我的mod3b模型列出了4个theta值,所以我想我需要在代码中添加另一个参数项。我只是无法弄清楚如何得到第四个theta项的方差在我的原始输出中显示。我感谢任何帮助!

这是我最初的交叉分类模型,随机斜率和随机拦截:

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)

它抛出的错误是:“错误:theta大小不匹配”

当我做回溯时,它给了我:

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 个答案:

没有答案