R语言线性混合模型不同样本量功效模拟全报错问题求解
问题排查及解决方案
核心错误原因
fcompare()函数用法错误:fcompare()用于比较两个嵌套模型,传入的第一个参数应为去掉待检验效应的简化嵌套模型,你原代码中传入的公式和完整模型的固定效应结构一致,模型比较逻辑不成立,导致所有模拟报错。- 你原代码中提前构造的
Ratings、attractiveness变量属于冗余内容,虽不会直接引发报错,但makeLmer()会根据你设定的效应参数自动模拟响应变量,这部分代码可直接删除。
修改方案
有两种可直接运行的修改方式:
方案1:修正fcompare()传入的公式
将fcompare()的参数替换为去掉Ring效应的简化混合模型公式:Ratings ~ 1 + (1|participants)
方案2:用更简便的fixed()检验指定效应
直接传入待检验的固定效应名称Ring,不需要手动编写嵌套模型,出错概率更低。
修改后完整可运行代码
library(lmerTest) library(simr) library(tidyverse) # 构造基础数据集 Ring = rep(c('Ring', 'NoRing'), times = 1000) participants <- rep(factor(1:100), each = 20) targetID = rep(1:10, each = 2) targetImage = rep(targetID, times = 100) data <- data.frame(participants, Ring, targetImage) # 设定模型参数 fixed <- c(3, 0.5) # 截距、Ring的固定效应值 rand <- 0.5 # 参与者随机截距方差 res <- 2 # 残差方差 # 构造线性混合模型 model <- makeLmer(Ratings ~ Ring + (1|participants), fixef = fixed, VarCorr = rand, sigma = res, data = data) # 功效模拟(默认使用方案2的fixed检验,需要用fcompare可替换为注释行代码) sim_treat <- powerSim(model, nsim = 100, test = fixed("Ring")) # sim_treat <- powerSim(model, nsim = 100, test = fcompare(Ratings ~ 1 + (1|participants))) sim_treat
后续功效分析提示
如果需要计算不同样本量对应的功效,可以搭配extend()函数调整参与者数量、试次数量,迭代计算不同参数下的功效值即可。
内容的提问来源于stack exchange,提问作者semchena31
相关产品推荐
相关产品推荐

