尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Stata面板数据全流程:xtreg固定效应与xtabond2动态GMM

Stata面板数据全流程:xtreg固定效应与xtabond2动态GMM 简介第13章《Stata面板数据分析》课件共80页面向经济学、管理学等方向需要开展实证研究的本科生、研究生与数据分析从业者系统梳理面板数据的建模思路与Stata实现路径。内容从xtset定义面板数据、xtsum描述统计、xtdescribe结构描述、xttab分布频率、xttrans转移概率和xtline截面绘图等基础操作讲起逐步延伸到固定效应与随机效应模型、长面板模型、面板工具变量法、动态面板模型以及面板离散选择模型、计数模型与随机效应Tobit模型等专题并以4711名妇女1968—1988年调查数据wage.dta为实验案例贯穿各命令演示。资源包内含1个pptx文件大小约1.26MB以命令语法、选项说明与实例输出对照呈现便于课堂讲授或按章节自学检索。目前已有448人学习下载适合需要补齐面板计量实操环节的读者。1. 面板数据不是多了时间维度的截面数据一个常见的场景手里有 3000 家上市公司 2012—2023 年的财务数据想做一个 ROA 对杠杆率的回归。把 12 年数据直接堆在一起跑 OLS杠杆系数往往落在 -0.3 附近一旦控制住个体固定效应同一个系数会缩到 -0.08 甚至翻正。差额全部来自不随时间变化的企业异质性——行业、产权性质、注册地、成立年限这些东西只要和解释变量相关混合 OLS 的估计就站不住。面板数据分析的价值不在样本量翻了几倍而在于把每家企业和自己比这条信息真正用起来这也是统计计量分析里最容易被跳过的一步模型设定对了系数才有解释力。下面按 xtset 结构声明、xtsum 描述统计、xtreg 静态估计、xtabond2 动态 GMM、稳健性与亚组检验、esttab 导出的顺序走一遍完整链路写实证分析章节的研究生和需要搭一套可复用数据分析模板的从业者都能直接套用。2. 用 xtset 把宽表变成面板结构声明与描述性统计2.1 长表与宽表reshape 该放在哪一步Stata 的xt系列命令全部要求长表一行一个个体—年份观测个体标识和时间标识各占一列。从 Excel 或数据库导出来的数据经常是宽表每家企业在同一行横向摊开十几个年份这时候必须在清洗阶段先转成长表不要等到建模时才处理。* 宽表转长表把 roa2012 roa2013 ... 压成 roa 一列 * i() 指定个体标识j() 指定时间标识后缀必须是年份数字 reshape long roa lev size, i(firm_id) j(year) * 反向操作交给 R 或 Python 画图前偶尔需要 reshape wide roa lev size, i(firm_id) j(year)reshape long的后缀匹配规则是硬性的变量名必须是公共前缀 j 的取值roa2012对应j(2012)前缀写成roa_2012就会报variable roa_2012 does not uniquely identify...之类的错。转换完先isid firm_id year验证唯一性不通过说明原始数据里有重复记录要先duplicates report firm_id year找出来。习惯用 R 的读者在这里容易踩坑reshape是原地改数据转错了只能靠preserve/restore或者重新导入所以清洗脚本里最好先save一份中间文件。2.2 xtset 与 xtdescribe先确认平衡性和时间断层声明面板结构只有一条命令但它决定了后面所有xt命令能不能跑。* 声明个体与时间维度 xtset firm_id year * 查看面板结构个体数、每期观测数、断层模式 xtdescribe * 取消声明改数据结构前需要 xtset, clearxtdescribe的输出里最该看的是Distribution of T_i和后面的模式串1xxxxxxxxx表示每家企业在 10 个年份上的观测模式完全一致也就是平衡面板出现1xxx1xxx这种就是非平衡面板。非平衡本身不影响xtreg估计xtreg, fe会自动丢弃该个体信息不全的年份真正要警惕的是系统性缺失——比如小公司数据大面积缺 2018 年之前的部分那就是样本选择问题不是技术问题。判断维度命令或输出处理方式唯一性isid firm_id year报错则先去重面板类型xtdescribe的 T_i 分布非平衡需在文中说明时间断层xtdescribe模式串用tsfill, full补齐后插值或加缺失标记时间间隔xtset后delta()提示年度数据应显示 delta 12.3 xtsum 的组内标准差比均值更有用summarize给的是一个混合了组间和组内变异的均值与标准差做面板模型前应该换成xtsum。* 面板专用描述统计拆出 overall / between / within 三个标准差 xtsum roa lev size growth cash * 配合极值检查避免个别观测把系数带偏 summarize roa lev size, detail三个标准差的含义完全不一样between sd反映的是企业在样本期均值之间的差异within sd反映的是同一家企业跨年份的波动。固定效应模型只吃within这部分变异如果一个变量比如产权性质、所属行业的 within sd 接近 0放进xtreg, fe里要么被吸收、要么系数不可识别这时候应该退回去用随机效应或者在混合 OLS 里控制行业虚拟变量。summarize, detail输出里的 Min、Max 和 1%、99% 分位数用来判断要不要缩尾winsor2 lev size, cuts(1 99) replace是最省事的写法处理完记得在新变量名上留痕方便稳健性检验时对比。2.4 缺失值、极端值与样本边界* 缺失模式每个变量缺多少、缺失是否成组出现 misstable summarize roa lev size growth * 只看进入回归的样本还剩多少个体 xtdescribe if !missing(roa, lev, size, growth) * 给每个个体生成时间趋势供后续控制共同趋势 bysort firm_id (year): gen trend _nmisstable summarize会给出每个变量的缺失率和缺失模式的组合数如果某个组合的观测数特别大说明缺失不是随机的。xtreg默认按列表删除一行里有任何一个变量缺失整条观测就出局所以变量一多实际样本可能比想象中少三成。开工前用xtdescribe if !missing(...)确认剩下多少个体比事后在表格里写样本量 24,317要靠谱得多。3. xtreg 的三种设定与豪斯曼检验静态面板怎么选3.1 混合 OLS、固定效应、随机效应的模型差异三个模型写开来只差一项。混合 OLS 是 y_it α βx_it u_it把所有观测当独立样本固定效应是 y_it α_i βx_it u_it允许每个个体有自己的截距 α_i并且允许 α_i 与 x_it 任意相关随机效应把 α_i 拆成 α μ_i要求 μ_i 与 x_it 不相关然后用 GLS 估计。差别的全部意义就在相不相关这四个字上相关而用 RE系数有偏不相关而用 FE系数无偏但方差更大、还识别不了时不变变量。模型命令对个体效应的假设能估计时不变变量典型使用场景混合 OLSreg不存在个体效应能基准对照或个体效应已被行业虚拟变量吸收固定效应xtreg, feα_i 与 x 相关不能企业、地区、个体层面的因果推断随机效应xtreg, reα_i 与 x 不相关能需要估计性别、产权、行业等时不变变量组间估计xtreg, be只用个体均值回归能变量组内变异极小时3.2 xtreg 命令与必调参数* 基准混合 OLS标准误按个体聚类 reg roa lev size growth, vce(cluster firm_id) * 固定效应 年份虚拟变量这是国内实证论文最常见的设定 xtreg roa lev size growth i.year, fe vce(cluster firm_id) estimates store m_fe * 随机效应sa 用 Swamy-Arora 估计方差成分mle 为极大似然 xtreg roa lev size growth i.year, re sa estimates store m_refe和re是最常改的两个开关be只在解释变量几乎不随时间变化时才有意义。vce(cluster firm_id)是必加的面板数据几乎一定存在组内序列相关不聚类的话标准误会被低估t 值虚高。加了cluster之后固定效应的 F 检验会从 F 分布切到 t 分布、自由度变成 G-1G 为个体数这一点在老版本的论文里经常被忽略。i.year生成年份虚拟变量用来吸收宏观冲击注意它和fe不冲突但和时间趋势项同时放会共线。最后提醒一句xtreg, fe里放i.industry、soe这类时不变变量会被直接吸收掉Stata 不报错但会给出omitted提示别以为模型没算。3.3 豪斯曼检验怎么读、什么时候失灵* 经典的豪斯曼检验H0 为随机效应一致 hausman m_fe m_re, sigmamore * 稳健版聚类稳健标准误下用过度识别检验 xtreg roa lev size growth i.year, re vce(cluster firm_id) xtoveridhausman的原假设是个体效应与解释变量不相关p 值小于 0.05 就拒绝选固定效应。sigmamore让两个估计都使用 RE 框架下的方差估计小样本下更稳。真正容易出问题的场景是先给 RE 加了vce(cluster)再跑hausman这时方差矩阵之差可能非正定Stata 输出卡方值为负检验直接失效。常见做法是换成xtoverid用户自编命令需先安装它基于过度识别约束和聚类稳健标准误兼容输出里只看 Hansen J 的 p 值和Difference-in-J那一行。另外要注意豪斯曼检验是渐近性质个体数只有二三十个的时候结论很不稳这时候与其硬套检验不如把两种设定都报出来。3.4 面板设定检验xttest0、xtserial、xttest3、xtcsd选完 fe 还是 re还要过一遍误差结构的检验否则标准误不可信。* 1. 随机效应是否存在Breusch-Pagan LM 检验 xtreg roa lev size growth, re xttest0 * 2. 组内一阶自相关Wooldridge 检验 xtserial roa lev size growth * 3. 组间异方差修正的 Wald 检验 xtreg roa lev size growth, fe xttest3 * 4. 截面相关Pesaran CD 检验 xtcsd, pesaran abs检验原假设拒绝后的应对xttest0不存在个体随机效应放弃混合 OLS改用 fe 或 rextserial无一阶组内自相关聚类稳健标准误或改用动态面板xttest3组间同方差vce(cluster id)或xtgls, panels(hetero)xtcsd无截面相关xtsccDriscoll-Kraay 标准误或加时间固定效应短面板大 N 小 T里前三个检验几乎必然被拒绝这不是数据坏而是面板数据的常态。真到了自相关、异方差、截面相关三样齐全的程度除了聚类稳健标准误还可以上xtscc roa lev size growth i.year, fe lag(3)lag(3)控制 Newey-West 式的滞后截断年度数据一般取 2 到 4。4. 动态面板与内生性xtabond2 的完整流程4.1 内生性的四个来源与 Nickell 偏误面板模型的内生性来源比截面回归多一条把被解释变量的滞后项放进右边。y_it γy_i,t-1 βx_it α_i u_it 这个设定下xtreg, fe的组内变换会把 y_i,t-1 和变换后的误差项绑在一起产生的偏误量级约为 1/T这就是 Nickell 偏误。T5 的时候偏误还有 20%T30 才基本消失。国内上市公司数据 T 通常只有 8 到 12直接跑固定效应估计动态模型γ 会被严重低估。另外三类内生性分别是遗漏的时变变量、被解释变量与解释变量的双向因果、以及测量误差。工具变量法是统一解法面板数据的好处是有历史信息可以用——滞后两期以上的变量在弱外生假设下可以做工具变量。4.2 xtabond2 的最小可用命令与参数* 依赖包 ssc install xtabond2 ssc install ivreg2 ssc install ranktest * 差分 GMMnoleveleq 表示只用差分方程 xtabond2 roa L.roa lev size growth, /// gmm(L.roa, lag(2 4) collapse) /// iv(lev size growth) /// noleveleq twostep robust small参数逐个说清楚gmm(L.roa, lag(2 4))声明内生变量是滞后一期的被解释变量工具变量取它的第 2 到第 4 期滞后collapse把工具变量集折叠成一列是控制工具变量数量的第一手段。iv(lev size growth)声明这三个变量是严格外生的用它们自身做工具变量如果某个变量也内生就要写进gmm()例如gmm(lev, lag(2 3))。noleveleq指定差分 GMM。去掉这个选项就是系统 GMM会额外使用水平方程弱工具变量问题更小但额外矩条件也更多。twostep用两步估计效率更高一步估计的稳健标准误不需要 Windmeijer 修正两步必须配robust。small输出 t 统计量而不是 z 统计量小样本下更保守。官方命令里等价的写法是xtabond差分 GMM和xtdpdsys系统 GMM语法不同但结果接近xtdpdsys需要另外写estat abond看自相关。4.3 AR(2) 与 Hansen 的判读标准估计完不要急着看系数先把三个诊断指标过一遍。诊断项看什么合格区间不合格说明AR(1)一阶自相关 p 值通常 0.1不显著说明模型设定可能有问题AR(2)二阶自相关 p 值 0.1显著则工具变量失效GMM 不可用Hansen J过度识别检验 p 值0.1 ~ 0.8过低说明工具变量外生性存疑过高说明工具变量过多工具变量数Number of instruments≤ 个体数超过个体数会严重削弱检验功效AR(2) 是最硬的一条它显著整个 GMM 结果就不能用调整滞后区间或者改系统 GMM 重新跑没别的办法。Hansen 检验的 p 值接近 1 反而是坏消息那是工具变量数量逼近个体数导致的检验失效很多审稿意见就卡在这一条上。4.4 工具变量过多的处理与官方命令替代工具变量数量随 T 平方级增长T15 时不加约束能生成上百个工具变量。三步压缩* 第一步折叠默认每期一个工具变量 → 总共一个 xtabond2 roa L.roa lev size, gmm(L.roa, lag(2 4) collapse) iv(lev size) twostep robust small * 第二步缩短滞后区间从 lag(2 4) 收到 lag(2 3) xtabond2 roa L.roa lev size, gmm(L.roa, lag(2 3) collapse) iv(lev size) twostep robust small * 第三步换系统 GMM xtdpdsys roa L.roa lev size, twostep vce(robust) estat abond压缩之后重新看 AR(2) 和 Hansen两项都合格再回去解释系数。动态面板的系数不能直接当边际效应读短期效应是 γ 本身长期效应是 γ/(1-β)如果 γ 在 0.6 附近长期效应会是短期效应的两倍以上这一点在写实证结论时经常被漏掉。5. 稳健性与亚组分析分组回归、系数差异检验和面板门槛5.1 稳健性检验从哪里下手稳健性检验不是随便换几个变量凑表格常见的四类做法对应四种质疑。* 1. 缩尾1% 和 99% 分位缩尾 winsor2 roa lev size, cuts(1 99) replace * 2. 替换被解释变量口径ROA 换成 ROE xtreg roe lev size growth i.year, fe vce(cluster firm_id) estimates store r_roe * 3. 剔除极端年份2020 年的冲击 xtreg roa lev size growth i.year if year ! 2020, fe vce(cluster firm_id) estimates store r_drop2020 * 4. 改变样本窗口只保留 2015 年之后 xtreg roa lev size growth i.year if year 2015, fe vce(cluster firm_id) estimates store r_win质疑对应稳健性做法关注点极端值驱动缩尾、剔除上下 1%系数符号和显著性是否维持变量测量误差换被解释变量或核心解释变量口径系数量级允许变化方向不能翻特殊时期驱动剔除危机年份、缩短样本窗口核心变量显著性遗漏变量加入更多控制变量、滞后一期解释变量系数稳定性而非显著性判断标准要提前定好核心解释变量的系数符号不能变显著性档次可以掉一级但量级变化超过 50% 就要回到模型设定上找原因而不是继续堆检验。5.2 亚组分析与组间系数差异检验亚组分析最常见的错误是分组跑两个回归一组显著一组不显著就说两组存在差异。显著性的差别不等于系数的差别正确做法是把组变量做成交互项。* 交互项法一次回归直接检验组间系数差异 * soe 为产权性质虚拟变量时不变主效应会被 fe 吸收交互项可识别 xtreg roa c.lev##i.soe size growth i.year, fe vce(cluster firm_id) * 检验交互项整体是否显著 testparm i.soe#c.levc.lev##i.soe展开后包含lev主效应、soe主效应和lev×soe交互项交互项系数就是两组斜率之差testparm给出的是这个差的联合检验 p 值。只有在交互项显著的前提下分组汇报两个系数才有意义。对于非线性模型或者两组要用不同函数形式的情况常见做法是自抽样构造经验 p 值用户自编的bdiff类命令设定 500 次重复、固定随机种子报出的经验 p 值和交互项检验结论应该基本一致。另外分组变量不能是随时间变化的变量否则交互项的解释会变成组内变化跟亚组分析的原意完全不同。5.3 面板门槛回归 xthreg 的操作顺序当分组标准是连续的比如企业规模、融资约束指数硬切分位数会损失信息这时候用面板门槛模型。ssc install xthreg * 单门槛以 size 为门槛变量同时作为受门槛影响的解释变量 xthreg roa lev size growth, /// rx(size) qx(size) thnum(1) grid(400) trim(0.01) bs(300 300 300)rx()是随门槛区间变化系数的变量一般包含门槛变量本身和核心解释变量qx()是门槛变量thnum(1)是门槛个数grid(400)是网格搜索点数点越多门槛值越精细但越慢trim(0.01)在两端各去掉 1% 的样本避免门槛落在极值区bs(300 300 300)是自抽样次数分别对应门槛效应检验、单门槛、双门槛。正确的操作顺序是先跑thnum(1)看门槛效应检验的 p 值显著再跑thnum(2)不显著就停在一门槛。门槛值本身没有对不对的问题只有区间内是否有经济含义的问题落在 0.3 分位的门槛和落在 0.7 分位的门槛讲出来的故事完全不同。6. esttab 导出与 do 文件复现把面板结果做成能提交的表6.1 esttab 一次导出三列结果跑完模型不estimates store最后导表只能靠手工抄这是实证分析里最没必要的返工。ssc install estout esttab m_ols m_fe m_re using panel_main.rtf, replace /// b(3) se(3) star(* 0.1 ** 0.05 *** 0.01) /// mtitles(混合OLS 固定效应 随机效应) /// stats(N r2_w r2_o, labels(样本量 组内R2 总体R2)) /// compress nogap * 期刊要求单独一份 CSV 时 esttab m_fe using panel_fe.csv, replace b(3) se(3) star(* 0.1 ** 0.05 *** 0.01)b(3) se(3)控制系数和标准误保留三位小数star()自定义显著性符号stats()里列出的统计量必须是估计命令返回的标量——r2_w组内 R²和r2_o总体 R²只有xtreg才有reg只有r2_a混着放会报statistic r2_w not found。mtitles里的列名直接对应论文表格的表头定稿前改这一处就够了。6.2 do 文件骨架与半年后复现* 00_master.do version 18 clear all set more off set seed 12345 global root D:/project/panel global tab $root/tab global log $root/log capture log close log using $log/panel_main.log, replace text do $root/01_clean.do do $root/02_describe.do do $root/03_static_reg.do do $root/04_gmm.do do $root/05_robust.do do $root/06_export.do log close四行是骨架的全部要点。version 18把命令行为锁死在当前版本避免升级后xtreg的默认选项变化导致结果对不上set seed保证门槛回归和自抽样的结果可复现种子写在文件里而不是藏在注释里global root用绝对路径会被吐槽但它比相对路径可靠换机器只需要改一行log using ... , text别用默认的 SMCL 格式纯文本才能在编辑器和 Git diff 里直接看。清理与建模拆成不同 do 文件改模型时不必重跑 40 分钟的清洗。xtset之后第一条描述性统计固定用xtsum而不是summarize组内标准差接近零的变量放进固定效应模型只会白白消耗自由度。本文还有配套的精品资源点击获取
返回列表