simr包powerSim计算二项GLMM功效时所有效应量均返回100%功效求助
问题核心原因
- 传参错误:你修改固定效应的操作是针对
latglmm1对象执行的,但运行powerSim()时传入的是未做任何修改的原始模型对象latglmm,你调整的效应量参数根本没有进入功效计算流程。原始模型中纬度效应p=0.007、采样日效应p<0.001,本身在714的样本量下已经达到极显著水平,自然无论怎么修改latglmm1的参数,输出都是100%功效。 - 模拟迭代数严重不足:输出结果明确标注仅基于10次模拟计算功效,对应的95%置信区间跨度从69.15%到100%,估计误差极大,完全不具备统计参考性,正式功效分析的模拟次数至少要设置为1000次,预实验最低也不能少于200次。
- 模型比较公式设置错误:你传入
fcompare()的简化模型公式~ scale(latitude) + native.status,会同时移除交互项和采样日固定效应两个项,和你“单独调整纬度、本地状态效应量计算功效”的目标不匹配,检验项和调整项错位也会导致结果异常。 - 观测水平随机效应导致功效虚高:模型中
catalogue.number的水平数为713,几乎和总样本量714持平,该随机效应的估计方差达1.26,解释了绝大部分残差变异,会让simr在模拟时高估有效检验效能,很容易出现全显著的100%功效结果。
修正操作流程
- 统一模型对象:修改固定效应、执行功效计算必须使用同一个模型对象,不要在不同命名的对象间操作导致参数传递失效。
- 正确设置比较公式:如果要检验某一个固定效应的功效,简化模型必须保留其余所有不需要检验的固定效应(比如采样日协变量、不调整效应量的其他主效应),仅移除你要检验的目标项。例如检验纬度和本地状态的交互项时,简化模型公式应为
~ scale(latitude) + native.status + scale(sample.day.of.year)。如果要单独检验某一个主效应,更稳妥的方式是用simr内置的fixed()函数直接指定要检验的参数名,避免公式写错。 - 调高模拟次数:运行
powerSim()时添加参数nsim=1000,算力不足时可先用nsim=200跑预实验确认趋势,不要用默认的10次模拟结果做结论。 - 校正观测水平随机效应方差:做功效模拟时,将观测水平随机效应的方差固定为你glmmTMB模型输出的离散参数估计值,不要直接使用lme4中可能偏高的方差估计,避免功效估计虚高。
兼容glmmTMB的替代功效分析方案
- 手动参数自助法(灵活性最高):
- 固定所有非目标参数(协变量效应、随机效应方差、截距)为你glmmTMB模型的实际估计值,将目标效应设置为你要测试的效应量
- 基于设定好的参数,重复模拟1000次响应变量数据集
- 对每个模拟数据集拟合对应的glmmTMB模型,提取目标效应的p值
- 统计p<0.05的模拟数据集占比,即为该效应量对应的统计功效
该方法完全不依赖simr包,可自由调整效应量、样本量、随机效应结构,还能直接输出每次模拟的p值分布。
- 使用mixedpower包:该包专门针对广义线性混合模型的功效分析设计,原生支持glmmTMB拟合的模型对象,不需要转换为lme4格式,可直接指定固定效应值后输出对应功效结果。
- 手动构建simr兼容模型:将glmmTMB输出的固定效应系数、随机效应方差手动输入simr的
makeGlmer()函数,构建专门用于模拟的lme4格式模型对象,绕开glmmTMB对象不兼容的问题。
内容的提问来源于stack exchange,提问作者Katy
相关产品推荐
相关产品推荐

