我目前正在尝试计算给定效果的效果大小(Cohen 的 f^2),但需要运行一个带有预先指定的随机效果的空模型和部分模型(根据 Selya 等人,2012用于处理连续预测变量)。塞利亚等人。概述在 SAS 中执行此操作所需的代码,但我试图弄清楚如何在 R 中执行此操作。
当我使用先前类似问题的最后一段代码时,我不断收到 thetas 不匹配的错误(“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)
非常感谢任何和所有帮助!