Stata两期面板固定效应1000次蒙特卡洛模拟代码求助
Stata固定效应模拟代码报错修复
代码存在的明确问题
- 非法命令行:
DEFINE PROGRAM THAT SPECIFIES THE DGP为说明文本,未添加注释前缀*,Stata会将其识别为无效命令直接终止运行 - 数值格式错误:参数
rho赋值写为-0,2,Stata仅支持英文点.作为小数点,逗号会被判定为参数分隔符触发语法报错 - 返回值不匹配:程序内部仅运行了混合OLS回归,未执行固定效应估计,但
simulate命令调用了不存在的r(b_FE)、r(se_FE)返回值,运行时会触发返回值不存在的错误 - DGP逻辑错误:随机扰动项
u、核心解释变量成分xstar均在面板展期(expand 2生成两期数据)前生成,属于不随时间变动的个体层面变量,会被固定效应完全吸收;且核心解释变量xit无时间维度的组内变异,固定效应估计无法识别系数。
修正后可直接运行的代码
clear all global numid = 400 * DEFINE PROGRAM THAT SPECIFIES THE DGP program treatment, rclass drop _all * 设定个体数量 set obs $numid * 生成个体固定效应 generate alpha = rnormal(0,2) gen id = _n * 扩展为2期平衡面板 expand 2 bysort id: gen t = _n * 声明面板结构 xtset id t * 调整数据生成过程,保证核心变量存在组内变异 generate x_ind = rnormal(2,4) // 核心解释变量的个体不变成分 generate x_time = rnormal(0,1) // 核心解释变量的时间变形成分 generate u = rnormal() // 每期随机扰动项,在展期后生成保证随时间变动 generate beta0 = 1 generate beta1 = 2 generate rho = -0.2 // 修正小数点格式 generate xit = x_ind + x_time + rho*alpha generate y = beta0 + beta1*xit + alpha + u * 存储混合OLS估计结果 regress y xit return scalar b_OLS = _b[xit] return scalar se_OLS = _se[xit] regress y xit, robust return scalar ser_OLS = _se[xit] * 补充固定效应估计,存储对应结果 xtreg y xit, fe return scalar b_FE = _b[xit] return scalar se_FE = _se[xit] end * 执行1000次重复模拟 simulate b_OLS=r(b_OLS) se_OLS=r(se_OLS) /// b_FE=r(b_FE) se_FE=r(se_FE), /// seed(117) reps(1000) :treatment * 查看模拟结果的统计特征(可验证FE估计无偏、OLS存在遗漏变量偏差) summarize
运行后可通过
summarize结果看到:混合OLS估计量因遗漏个体固定效应存在明显偏差,固定效应估计量的均值接近设定的真值2,符合预期。
内容的提问来源于stack exchange,提问作者BearCoder
相关产品推荐
相关产品推荐

