R中glmmTMB模型聚类稳健标准误报错:非数值二元运算符参数
解决glmmTMB模型调用vcovCR计算CR2稳健标准误的报错问题
1. 报错是否源于vcov(model)返回的列表结构?
是的,这就是报错的核心原因。vcovCR(来自clubSandwich包)默认要求模型对象的vcov()方法返回单个数值矩阵,但glmmTMB的vcov()会返回一个分块列表(包含cond子矩阵对应固定效应的方差-协方差、varcor对应随机效应的方差成分等)。当vcovCR内部执行nobs0(x) * vcov0(x, ...)时,试图用观测数(数值)乘以列表,自然会触发"非数值参数参与二元运算"的错误。
2. 解决方法
根据你的需求(仅固定效应/含随机效应),可以选择以下两种方案:
方案一:仅计算固定效应的CR2稳健标准误
直接提取glmmTMB模型中固定效应的方差-协方差矩阵,传入vcovCR的vcov参数:
# 提取固定效应的vcov矩阵 cond_vcov <- vcov(mixed_logit)$cond # 调用vcovCR并指定vcov参数 robust_se <- vcovCR(mixed_logit, cluster = data_used$id, type = "CR2", vcov = cond_vcov) # 查看带稳健标准误的系数结果 coef_test(robust_se)
方案二:针对包含随机效应的模型适配
将glmmTMB模型转换为lme4的merMod类对象(vcovCR对这类对象的支持更完善),再执行计算:
# 转换模型对象类型 mixed_logit_mer <- glmmTMB::as.merMod(mixed_logit) # 计算CR2聚类稳健标准误 robust_se <- vcovCR(mixed_logit_mer, cluster = data_used$id, type = "CR2") # 查看结果 coef_test(robust_se)
注意:转换后部分模型属性可能丢失,建议验证结果与原模型的一致性。
内容的提问来源于stack exchange,提问作者Vinka Defitri
相关产品推荐
相关产品推荐

