求助:带Conley标准误与权重的负二项及零膨胀负二项回归实现
解决方案:带权重与Conley标准误的负二项/零膨胀负二项回归
一、负二项回归(带权重+Conley标准误)
提供两种可靠实现方式:
方式1:fixest::fenegbin原生支持权重与Conley SE
fixest的fenegbin对概率权重(如熵平衡权重)支持明确,使用pweights参数传入即可,无需额外处理:
library(fixest) library(modelsummary) # 拟合带熵平衡权重+Conley标准误的负二项回归 m_weighted_conley <- fenegbin( y ~ x1 + x2, data = data, pweights = weight, # 传入你的熵平衡权重 vcov = vcov_conley(cutoff = 100, lat = "lat", lon = "lon") ) # 直接用modelsummary输出结果 modelsummary(m_weighted_conley, title = "带权重与Conley标准误的负二项回归")
注:如果是频数权重,替换为iweights = weight即可。
方式2:MASS::glm.nb + spatialreg计算Conley SE
若偏好glm.nb,可通过spatialreg包手动计算空间HAC标准误:
library(MASS) library(spatialreg) library(modelsummary) # 拟合带权重的负二项回归 m_nb_weighted <- glm.nb(y ~ x1 + x2, data = data, weights = weight) # 构建基于经纬度的空间邻接矩阵(截断距离100) coords <- data[, c("lon", "lat")] nb <- dnearneigh(coords, d1 = 0, d2 = 100) listw <- nb2listw(nb, style = "W") # 计算Conley标准误 conley_se <- spatialHAC(m_nb_weighted, listw = listw, type = "HC1")$betaSE # 替换标准误后输出 modelsummary(m_nb_weighted, vcov = conley_se, title = "带权重与Conley标准误的负二项回归")
二、零膨胀负二项(ZINB)回归(带权重+Conley标准误)
pscl::zeroinfl无原生Conley SE支持,需手动实现空间HAC估计:
library(pscl) library(sandwich) library(spatialreg) library(modelsummary) # 拟合带权重的零膨胀负二项模型(可根据需求调整零部分公式) m_zinb_weighted <- zeroinfl( y ~ x1 + x2 | 1, # 模型公式:计数部分~x1+x2,零部分无协变量 data = data, dist = "negbin", weights = weight ) # 1. 提取模型得分残差 score <- estfun(m_zinb_weighted) # 2. 构建空间权重矩阵 coords <- data[, c("lon", "lat")] nb <- dnearneigh(coords, d1 = 0, d2 = 100) listw <- nb2listw(nb, style = "W") # 3. 计算Conley HAC方差-协方差矩阵 n <- nrow(data) k <- length(coef(m_zinb_weighted)) vcov_conley <- matrix(0, k, k) for (i in seq_len(n)) { neighbors <- listw$neighbours[[i]] if (length(neighbors) > 0) { vcov_conley <- vcov_conley + tcrossprod(score[i, ], colSums(score[neighbors, ])) } } vcov_conley <- vcov_conley / n # 结合HC1标准误进行尺度调整 vcov_base <- vcovHC(m_zinb_weighted, type = "HC1") vcov_conley <- vcov_base %*% solve(diag(diag(vcov_base))) %*% vcov_conley %*% solve(diag(diag(vcov_base))) %*% vcov_base # 4. 输出结果 modelsummary(m_zinb_weighted, vcov = vcov_conley, title = "带权重与Conley标准误的零膨胀负二项回归")
注:上述空间HAC计算为简化实现,若需更严谨的结果,可参考空间计量文献中针对两部分模型的得分型空间HAC估计方法。
三、modelsummary输出Conley标准误的通用方法
无论使用哪种模型,只要能得到Conley标准误的向量或方差-协方差矩阵,都可通过modelsummary的vcov参数传入:
- 传入标准误向量:
modelsummary(model, vcov = conley_se) - 传入方差-协方差矩阵:
modelsummary(model, vcov = vcov_conley) - 对于
fixest模型,可直接提取内置的Conley VCOV:modelsummary(model, vcov = vcov(model))
内容的提问来源于stack exchange,提问作者kemajuan
相关产品推荐
相关产品推荐

