You need to enable JavaScript to run this app. R语言线性混合模型不同样本量功效模拟全报错问题求解
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 07:15:05