在R语言plm包pgmm函数中为GMM模型添加并显示截距项
问题原因与解决方案
当你在pgmm()中设置effect = "twoways"时,模型会同时控制个体固定效应和时间固定效应,此时全局截距项会被这两类固定效应吸收,因此不会在summary()的输出结果中显示。以下是两种满足你需求的解决方式:
方案1:移除时间固定效应,显示全局截距
如果你的研究场景不需要强制保留时间固定效应,只需将effect参数改为仅控制个体固定效应,全局截距项就会自动出现在变量结果列表中:
z1.AB <- pgmm(cpi ~ lag(cpi, 1:1)+lag(gdppc, 2:2) + lag(expense, 3:3) + lag(freedom, 2:2) | lag(cpi, 1:10) + lag(gdppc, 1:9) + lag(expense, 1:2) + lag(freedom, 1:8) + lag(democracy, 4:10) + lag(stability, 1:10), data = model, effect = "individual", # 改为仅个体固定效应 model = "twosteps", collapse = TRUE, subset = sample == 1) # 查看包含截距的结果 summary(z1.AB, robust = FALSE)
方案2:保留双向固定效应,手动计算截距
若必须保留双向固定效应,可通过fixef()函数提取固定效应,再结合因变量的总体均值计算全局截距:
# 先运行原双向固定效应模型 z1.AB <- pgmm(cpi ~ lag(cpi, 1:1)+lag(gdppc, 2:2) + lag(expense, 3:3) + lag(freedom, 2:2) | lag(cpi, 1:10) + lag(gdppc, 1:9) + lag(expense, 1:2) + lag(freedom, 1:8) + lag(democracy, 4:10) + lag(stability, 1:10), data = model, effect = "twoways", model = "twosteps", collapse = TRUE, subset = sample == 1) # 提取个体和时间固定效应 fe_ind <- fixef(z1.AB, effect = "individual") fe_time <- fixef(z1.AB, effect = "time") # 计算全局截距 mean_cpi <- mean(model$cpi[model$sample == 1], na.rm = TRUE) intercept <- mean_cpi - mean(fe_ind) - mean(fe_time) # 输出截距结果 cat("双向固定效应下的全局截距:", intercept, "\n")
内容的提问来源于stack exchange,提问作者Rossana Arcano
相关产品推荐
相关产品推荐

