simr混合模型功效模拟报错及相关技术问题咨询
问题分析与解决
1. 核心错误:length mismatch in theta (1!=3)
错误原因
你的随机效应结构是(follow_up | ID),代表每个个体包含随机截距和随机斜率,对应的方差-协方差矩阵需要3个参数:
- 随机截距的方差
- 随机斜率的方差
- 截距与斜率的协方差
但你在makeLmer中传入了VarCorr=V1,而V1是单个数值(0.5),仅对应1个参数,导致simr期望3个参数但只收到1个,触发长度不匹配错误。
解决方法
将VarCorr参数替换为你定义的V2(2×2的方差-协方差矩阵),它正好包含所需的3个参数(对角线为截距和斜率的方差,非对角线为两者的协方差)。修正后的代码行:
model1 <- makeLmer(y ~ follow_up + (follow_up |ID ), fixef=b, VarCorr=V2, sigma=s, data=X)
2. 附加问题解答
a) 数据矩阵中未包含结局变量的处理
不需要手动模拟结局变量y。makeLmer函数会根据你指定的固定效应、随机效应方差和残差方差,自动在输入数据中生成模拟的结局变量y。你只需确保预测变量(如follow_up、ID)存在即可。
b) 将斜率转换为Cohen's d值
Cohen's d用于量化效应大小,对于单组纵向设计的斜率,转换逻辑如下:
步骤1:计算总变化量
斜率代表每单位随访时间的结局变化量。你的随访时间是1到6(共5个时间间隔),因此从基线(时间1)到最后一个评估点(时间6)的总平均变化为:总变化 = 斜率 × (6 - 1) = 斜率 × 5
步骤2:选择合适的标准差(SD)
根据研究需求,有两种常见选择:
- 基线结局的SD:基线时结局的方差是随机截距方差 + 残差方差,即
V1 + s,因此SD为sqrt(V1 + s)。 - 变化值的SD:从基线到终点的变化值的方差为
25×随机斜率方差 + 2×残差方差(变化值包含5倍的随机斜率和两个独立残差项),即25*V2[2,2] + 2*s,SD为sqrt(25*V2[2,2] + 2*s)。
步骤3:计算Cohen's d
Cohen's d = 总变化 / 所选SD
示例(以你的参数为例):
假设修改后的斜率为-0.05:
- 总变化 = -0.05 ×5 = -0.25
- 基线SD = sqrt(0.5 +1) ≈1.2247 → d≈-0.25/1.2247≈-0.204
- 变化值SD = sqrt(250.1 +21)=sqrt(2.5+2)=sqrt(4.5)≈2.1213 → d≈-0.25/2.1213≈-0.117
注意:负号表示结局随时间下降,绝对值代表效应大小的强弱。
内容的提问来源于stack exchange,提问作者Blubbb
相关产品推荐
相关产品推荐

