You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用simr包时powerSim/powerCurve全报错,逆高斯log模型奇异拟合求助

问题诊断与解决方案

核心问题拆解

  • 奇异拟合本质:你的模型里Subject随机截距的方差接近0(1.139e-12),说明个体间反应时的差异可以忽略,混合模型的随机效应部分完全没必要,导致模型卡在拟合边界(singular fit)。
  • 效应被噪声淹没:DistancePower的估计值(-0.117)对应的标准误大得离谱(1.286),t值仅-0.091,p值0.927——预实验数据里这个效应根本没被检测到。simr是基于现有模型参数模拟数据,效应量过小且噪声极大时,模拟中自然也找不到显著结果,所以效能全是0%。
  • 错误的效应调整:你手动把DistanceBase和DistancePower的效应乘以0.9,进一步缩小了本就不显著的效应,相当于给检测难度“火上浇油”。

分步解决办法

1. 处理奇异拟合

  • 先砍掉随机效应,改用普通广义线性模型(glm)试试:
    model_glm <- glm(RT ~ Compatibility + DistanceBase + DistancePower, 
                     family=inverse.gaussian(link="log"), data = df)
    summary(model_glm)
    
    如果拟合正常,说明你的数据根本不需要混合模型结构,用glm做效能分析更合理。
  • 非要用混合模型的话:
    • 先清理异常值(比如残差最大值10.01,大概率是极端数据拖垮了拟合),再重新建模。
    • 换个优化器试试,比如optimizer="bobyqa",同时降低nAGQ值(比如设为1),先保证模型能稳定收敛。

2. 设定合理的效应量

simr的效能分析靠的是有实际意义的效应量,你当前预实验的效应被噪声盖过了,不能当基准:

  • 要是有文献或前期研究支持的理论效应量,直接替换模型里的固定效应值,别用预实验的无显著结果:
    # 示例:假设理论上DistancePower的效应是-0.5,替换成你的实际预期值
    fixef(model1)["DistancePower"] <- -0.5
    
  • 没理论依据的话,先增大预实验样本量,先得到能检测到显著效应的参数估计,再做效能分析。

3. 调整simr参数

  • 把nsim调大到100或200,你现在设的10次模拟结果方差极大,完全不可信。
  • 如果改用glm,就别用along="Subject"了,直接基于总样本量扩展(along="n")。

4. 再验证模型适配性

你觉得逆高斯log连接最适配,但奇异拟合和超大标准误可能说明模型仍有问题:

  • 检查残差分布,确认逆高斯分布是不是真的适合你的数据。
  • 试试其他连接函数(比如identity)或分布族(比如伽马分布),对比AIC和残差情况。

修正后的示例代码

# 示例:移除残差极端值(绝对值大于3倍标准差)
df_clean <- df[abs(rstandard(model1)) < 3, ]

# 改用普通glm(如果随机效应无意义)
model_glm <- glm(RT ~ Compatibility + DistanceBase + DistancePower, 
                 family=inverse.gaussian(link="log"), data = df_clean)

# 替换为理论预期的效应量
fixef(model_glm)["DistancePower"] <- -0.5

# 扩展总样本量并计算效能
model_ext <- extend(model_glm, n=500)
pc <- powerCurve(model_ext, fixed("DistancePower"), along="n", nsim=100)
print(pc)

内容的提问来源于stack exchange,提问作者N Neumann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:20:14