使用JMBayes拟合mvglmer时出现Error in x$terms错误求助
排查jmbayes::mvglmer函数的报错问题
问题概况
用jmbayes包的mvglmer拟合多变量混合模型,数据是患者重复测量的二分类结局(ecgrate_binary、ecgpri_binary),首条数据片段:
id1 predx 1011025 Prednisolone wks ecgrate_binary ecgpri_binary 0 1 0
运行以下代码时触发错误:
mvFit1 <- mvglmer(ecgrate_binary ~treatment+ time+(time|id), ecgpri_binary ~treatment+time +(1|id), data = my_df, families = list(binomial(link = "logit", binomial(link = "logit")), engine ="STAN")
错误信息:
Error in x$terms : object of type 'symbol' is not subsettable
错误原因与修正步骤
1. families参数语法错误
原代码中families的写法完全不符合要求:
- 每个结局变量需要对应一个独立的
binomial()构造器,列表元素要分开定义 - 存在多余的嵌套括号,导致参数解析失败
正确写法:
families = list(binomial(link = "logit"), binomial(link = "logit"))
2. engine参数位置错误
engine是mvglmer的顶层参数,不能放在families列表内部,必须移到函数参数的顶层位置。
3. 变量名不匹配
从数据片段看:
- 时间变量列名是
wks,但代码里写的是time,需统一为数据中实际存在的列名 - ID列名是
id1,代码里用的是id,同样要统一(要么改代码里的id为id1,要么重命名数据列)
修正后的完整代码
假设数据中时间列是wks、ID列是id1,修正后代码:
mvFit1 <- mvglmer( ecgrate_binary ~ treatment + wks + (wks|id1), ecgpri_binary ~ treatment + wks + (1|id1), data = my_df, families = list(binomial(link = "logit"), binomial(link = "logit")), engine = "STAN" )
额外验证项
- 确认
my_df中存在treatment列,且无格式错误 - 检查结局变量是否都是0/1编码的二分类变量
- 若数据存在缺失值,需按STAN的要求预处理(比如删除缺失行或指定处理方式)
内容的提问来源于stack exchange,提问作者Modiehi
相关产品推荐
相关产品推荐

