You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:44:57