如何为R中margins包得到的平均边际效应(AME)计算聚类标准误?
为Probit模型的平均边际效应(AME)计算聚类标准误
要给margins计算的AME添加聚类标准误,核心是结合sandwich包构造聚类调整的方差-协方差矩阵,再传递给margins或lmtest::coeftest。以下是具体步骤:
所需包
确保加载必要的R包:
library(glm) library(lmtest) library(margins) library(sandwich)
步骤1:估计Probit模型
先拟合基础的probit模型:
# 示例:用mtcars数据,因变量am(二分类),自变量hp、wt model1 <- glm(am ~ hp + wt, data = mtcars, family = binomial(link = "probit"))
步骤2:构造聚类方差-协方差矩阵
使用sandwich::vcovCL生成聚类调整的方差矩阵,指定聚类变量(比如按cyl聚类):
cluster_var <- ~ cyl # 替换为你的实际聚类变量 vcov_cluster <- vcovCL(model1, cluster = cluster_var)
如果需要多重聚类,直接在公式中添加多个变量即可,比如~ group1 + group2。
步骤3:计算带聚类标准误的AME
有两种常用方式:
方式1:在margins中直接指定vcov
计算AME时传入聚类方差矩阵,后续summary会直接输出调整后的标准误:
AME <- margins(model1, variables = c("hp", "wt"), vcov = vcov_cluster) summary(AME)
方式2:用coeftest重新计算标准误
如果已经计算了AME对象,可通过lmtest::coeftest传入聚类方差矩阵,输出更简洁的统计结果:
AME <- margins(model1, variables = c("hp", "wt")) coeftest(AME, vcov = vcov_cluster)
原理说明
margins计算的边际效应的方差依赖于原模型的方差-协方差矩阵。vcovCL生成的聚类调整矩阵,会被用来重新计算AME的标准误、t值和p值,从而得到聚类稳健的统计推断结果。
内容的提问来源于stack exchange,提问作者Maximilian
相关产品推荐
相关产品推荐

