将Stata的xtabond命令转换为R代码并解析滞后项含义
在R中复现Stata xtabond的Arellano-Bond估计结果
问题1:R中可替代的函数
你用plm::pgmm没复现成功,大概率是参数没和Stata的xtabond对齐。plm包的pgmm是最贴合Stata xtabond的工具,只要参数设置正确就能匹配结果。如果还是遇到bug,可以尝试gmm包的底层gmm函数手动实现矩条件。
适配Stata命令的pgmm代码模板
library(plm) # 将数据转换为面板格式(指定个体和时间索引) panel_data <- pdata.frame(your_dataset, index = c("stcode", "year")) # 构建Arellano-Bond一阶差分GMM模型 ab_model <- pgmm( # 回归公式:因变量 + 滞后1期因变量 + 其他解释变量 rpcexp_annual ~ lag(rpcexp_annual, 1) + election + election_3 + election_2 + rpcinc_annual + rpcgrants_annual + unem + popmillions_annual + kidsaged + rr + dd + y1974 + y1975 + y1976 + y1977 + y1978 + y1979 + y1980 + y1981 + y1982 + y1983 + y1984 + y1985 + y1986 | # 工具变量:对应maxlag(4),用因变量滞后2-4期的水平值 lag(rpcexp_annual, 2:4), data = panel_data, # 匹配Stata的样本筛选条件 subset = stcode != 2 & stcode != 4 & stcode != 29 & stcode != 39 & stcode != 45 & stcode != 42 & year >= 1974, model = "twostep", # Stata xtabond加robust选项默认用两步GMM robust = TRUE, # 对应Stata的robust标准误 transformation = "fd" # 一阶差分转换,对应Stata xtabond的默认行为 ) # 查看估计结果 summary(ab_model)
问题2:Stata命令中maxlag(4)的含义
Stata的xtabond默认会用因变量所有可用的滞后2期及以上水平值作为工具变量,maxlag(4)是给这个工具变量集合设上限:只使用因变量的滞后2期、3期、4期水平值作为工具,不会纳入滞后5期及更早的观测值。
需要明确几个细节:
- 这个命令里,只有因变量
rpcexp_annual的滞后项被当作内生变量处理,它的滞后1期是核心解释变量,滞后2-4期是工具变量。 - 其他所有解释变量(比如
election、rpcinc_annual等)被Stata默认视为外生变量,它们的一阶差分直接作为工具变量,不受maxlag(4)的限制。 - 如果你的研究中有其他内生解释变量,需要额外在命令中指定,但从给出的Stata代码来看,没有这类变量。
内容的提问来源于stack exchange,提问作者eric andre the gian
相关产品推荐
相关产品推荐

