R语言huxreg输出CI/P值时报错:无character类对象的tidy方法
报错原因
- 第一处错误是参数使用方式不符合要求:
error_style是单值参数,仅支持选择系数下方括号内展示的一类统计量(可选值为标准误stderr、置信区间ci、P值pvalue),你传入c('ci')虽然是单元素向量,但huxreg内部参数校验逻辑会将未匹配规则的字符向量识别为待合并的模型对象,尝试调用tidy方法做结果提取,最终触发「No tidy method for objects of class character」报错。 - 第二处潜在问题是输入对象不满足计算需求:你传入的
sandA是coeftest生成的聚类稳健检验结果对象,仅存储了系数、标准误、z值、P值,没有绑定对应的聚类稳健方差协方差矩阵,就算修正参数写法,huxreg也无法基于该对象计算正确的聚类稳健置信区间,会自动退回原始模型的普通标准误计算结果,数值存在偏差。
修正方案
直接传入原始GLM模型,通过huxreg内置的vcov参数指定聚类稳健方差协方差矩阵,同时正确配置参数实现P值、置信区间的输出,参考代码如下:
# 加载依赖包 library(huxtable) library(sandwich) # 拟合基准模型 modelA <- glm( dest_flood ~ buyout_flag, data = full_data, weights = weights, family = quasibinomial(link = "logit") ) # 输出带聚类稳健标准误、置信区间、P值的回归表 huxreg( modelA, vcov = vcovCL(modelA, cluster = ~subclass), # 指定聚类稳健方差 error_style = "ci", # 括号内展示95%置信区间,直接传字符串无需c()包裹 ci_level = 0.95, # 可按需调整置信水平 coef_pval = TRUE, # 单独生成P值列,实现同时展示CI和P值的需求 stars = c(`***` = 0.001, `**` = 0.01, `*` = 0.05, `.` = 0.1) # 匹配常规显著性星号规则 )
补充说明
- 不建议先单独跑
coeftest再传入huxreg:这种写法需要手动给coeftest对象追加方差属性才能正确计算CI,流程冗余容易出错。 - 如果不需要单独列P值,只想在括号里展示P值,直接把
error_style设为"pvalue"即可,不需要额外加参数。
内容的提问来源于stack exchange,提问作者tchoup
相关产品推荐
相关产品推荐

