R语言miceadds::glm.cluster模型聚类标准误下平均边际效应计算及报错排查
操作报错的核心原因
- 直接传入
glm.cluster对象到margins的报错:margins的底层数据定位函数find_data仅支持识别传统S3类的模型对象,miceadds::glm.cluster返回的是自定义结构对象,没有内置可被识别的公式调用关联属性,因此触发“需要公式调用”的识别错误。 - 提取内嵌
glm_res传入margins的报错:glm.cluster内部存储的glm_res是临时生成的回归结果容器,生成完成后即剥离了原始数据集关联、模型环境绑定等属性,margins在计算微分时无法从无绑定的环境中定位到解释变量,因此触发“对象找不到”的错误,同时因无法识别变量类型,生成对应类不识别的警告。
保留聚类稳健标准误的平均边际效应计算方案
glm.cluster的核心逻辑是在基础glm的系数估计完成后,仅将模型默认协方差矩阵替换为聚类稳健版本,本身不改动回归系数的计算结果。基于该特性可按以下步骤操作:
- 从
glm.cluster的返回对象中提取聚类稳健协方差矩阵
cluster_vcov <- cseLogit$vcov
- 使用原始数据集,按照和
glm.cluster完全一致的参数,重新运行一次基础glm回归,保证模型对象的环境、数据关联属性完整可被margins解析
# 与glm.cluster的公式、样本、分布族设定完全对齐 base_logit <- glm( formula = follow ~ f1_distance + f2_distance + PolFol + MediaFol, data = data_long, family = binomial(link = "logit") )
- 调用
margins计算平均边际效应,显式指定之前提取的聚类协方差矩阵覆盖模型默认协方差,确保边际效应的标准误完全继承聚类稳健调整结果
ame_result <- margins( model = base_logit, vcov = cluster_vcov )
操作注意事项
- 重新运行的基础
glm必须和原glm.cluster的公式、样本量、分布族设定完全一致,保证回归系数与原聚类模型完全对齐,避免边际效应数值出现偏差。 - 不要直接使用
cseLogit$glm_res作为margins的输入,该对象的临时环境属性已被清理,无法正常完成变量定位。 - 该方案计算得到的平均边际效应数值与原聚类模型完全一致,标准误通过显式指定聚类协方差实现,不会丢失聚类调整的效果。
内容的提问来源于stack exchange,提问作者stathomie41
相关产品推荐
相关产品推荐

