R语言中控制年份/行业固定效应的Dynamic GMM实现方法咨询
动态GMM(pgmm)实现步骤
1. 误区澄清
你之前对plm索引的顾虑可以打消:pdata.frame设置PERMNO和Year为索引,仅用于识别每个个体的时序关系、正确生成滞后项,不会强制加入个体固定效应,你依然可以按照需求手动控制行业和年份固定效应,和你用lm时的逻辑完全一致。
2. 具体实现代码
# 加载plm包 library(plm) # 转换为面板数据格式,用于识别个体时序关系 pdata <- pdata.frame(data, index = c("PERMNO", "Year")) # 拟合动态GMM模型 gmm_result <- pgmm( # 公式左侧为被解释变量,右侧为回归项,|后为工具变量设定 formula = A ~ B + Controls + lag(A, 1) + lag(A, 2) + factor(SIC) + factor(Year) | # 用A的3阶及以上滞后作为内生滞后项的工具,外生变量直接作为自身工具 lag(A, 3:99) + B + Controls + factor(SIC) + factor(Year), data = pdata, model = "twosteps", # 选择两步GMM,估计效率更高 transformation = "d" # 选d为差分GMM(Arellano-Bond),选ld为系统GMM )
3. 结果检验与输出
# 输出回归系数与显著性 summary(gmm_result) # Sargan过度识别检验,p值>0.05说明工具变量设定有效 sargan.test(gmm_result) # 二阶序列相关检验,p值>0.05说明模型无二阶自相关,符合GMM设定要求 mtest(gmm_result, order = 2)
关键说明
- 工具变量部分的
lag(A, 3:99)是通用写法,即使用所有可用的3阶及以上A的滞后值作为工具,若你的样本时序长度较短,可以调整为lag(A, 3:n),n为你样本的最大时序长度。 - 如果你需要使用系统GMM,仅需将
transformation参数改为"ld"即可,工具变量部分无需额外调整,pgmm会自动生成水平方程的对应工具。
内容的提问来源于stack exchange,提问作者derek
相关产品推荐
相关产品推荐

