ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Stata面板数据分析:固定效应、随机效应与内生性处理全流程

Stata面板数据分析:固定效应、随机效应与内生性处理全流程 简介面向经济学、社会学等领域的实证研究者、研究生与高年级本科生这份课件系统讲解Stata在面板数据分析中的运用帮助读者从数据设定走向各类计量模型的估计与解读。压缩包内含1个pptx文件约1.26MB共80页属于统计与计量课程的第13章围绕面板数据展开完整教学。截至目前已有448人学习下载。内容涵盖面板数据基本操作、固定效应与随机效应模型、长面板模型、面板工具变量法、动态面板、面板离散选择与计数模型以及随机效应Tobit模型并配有实验案例演示xtset、xtsum、xtdescribe等命令及建模流程。章节按主题递进公式、命令与结果解读结合适合课堂授课、自学查阅与实证分析时快速参考。1. 一份 80 页课件背后的真问题Stata 面板数据分析在解决什么手上拿到一张 3000 家上市公司 2010—2023 年的表格变量是 roa、size、lev四万行数据。很多人第一反应是直接reg roa size lev跑出来系数显著、R² 还行就写进论文了。问题在于两个层面同一家公司十四年的观测被当成了十四个互相独立的样本标准误被系统性低估公司自身那些不随时间变化的特征——管理层风格、区位、股权性质——全被塞进了扰动项一旦它们和 size 相关系数就是有偏的。面板数据分析要干的事就是把这层个体 × 时间的二维结构显式声明给 Stata让估计器知道哪些行来自同一个主体。它适合做实证分析处理的人写毕业论文的研究生、做政策评估的分析师、跑企业经营指标对比的从业者。整条链路的核心动作只有三步用xtset声明面板结构用xtreg在固定效应与随机效应之间选模型用检验和稳健标准误确认这套设定站得住。2. 面板数据的结构声明与清洗xtset、reshape 与缺失年份补齐2.1 个体-时间二维结构平衡面板与非平衡面板的差别面板数据和普通截面数据的唯一区别是每一条观测背后都有一个个体编号 时间编号的组合。这个组合是面板分析的坐标系后面所有命令都以它为前提。四种常见数据形态在实操中混在一起先分清再动手。类型结构特征典型来源Stata 声明对估计的影响平衡面板每个个体都有完整的 T 期观测实验室追踪、强制定期报表xtset id t估计量性质最干净滞后项无断档非平衡面板个体观测期数不等中间可能断档上市公司进出、问卷流失xtset id t同样可用FE 仍一致滞后项会因断档丢样本宽表一行一个体多列是不同年份的同一变量Excel 手工整理先reshape long直接 xtset 必然报错长表一行一个个体-年份数据库导出、CSV 下载直接xtset分析的标准形态非平衡面板不是缺陷。强行用tsfill把每个个体的年份补齐、再对缺失的因变量做插值会凭空造出不存在的观测反而引入偏误。补齐只应用在解释变量有明确插值依据、或者你需要构造滞后项的场景。2.2 xtset 与 xtdescribe把表格变成面板的最小命令* 导入并检查个体-时间组合是否唯一 import excel firm_panel.xlsx, sheet(data) firstrow clear * 年份若被读成字符串先转数值转换失败会变成缺失要回头查 destring year, replace * 关键一步查有没有重复的 id-year duplicates report firm_id year duplicates drop firm_id year, force * 声明面板个体变量 firm_id时间变量 year xtset firm_id year * 看面板全貌 xtdescribe xtsum roa size levxtset的第一个参数是个体标识第二个是时间标识。时间变量必须是整数不能是字符串也不能有缺失否则会报time variable ... not integer或repeated time values within panel。加上delta(1)可以强制声明时间间隔为 1适合年份连续但个别公司缺年的数据。xtdescribe输出的是每个个体的观测期数和整体分布看到distribution of T_i那一行就知道自己的面板有多不平衡。xtsum比普通summarize多出 overall、between、within 三列标准差within 那一列是固定效应真正利用的变异如果某个变量的 within 变异接近 0它在 FE 里基本估计不出东西。2.3 长宽转换 reshape 与缺失年份补齐的两种场景从 Excel 或者某些论文附录拿到的数据常常是宽表roa2010 roa2011 roa2012这样横着排。转成长表是分析前的必经步骤。* 宽表转长表i() 里是唯一识别个体的变量j() 是新建的时间变量名 reshape long roa size lev, i(firm_id) j(year) * 长表转回宽表做描述统计或画图时偶尔需要 reshape wide roa size lev, i(firm_id) j(year) * 场景一只补时间维度上的空档不造新变量 xtset firm_id year tsfill * 场景二想把每个个体都补成完整的时间区间并标记哪些是新补的行 tsfill, fullreshape long里的i()必须唯一识别一个个体的静态变量比如公司代码、地区代码j()是会在新数据里生成的年份列命名要和原变量后缀一致。tsfill只对 xtset 之后的数据生效它不插值只是把缺失的个体-时间行补成空行变量值为缺失。所以正确姿势是tsfill之后再决定滞后项用L.会自动跳过断档如果业务上要求把断档视为零比如某年没有专利申请就是 0那就手动replace patent 0 if missing(patent)。2.4 面板数据进入回归前的四个必查项第一查唯一性duplicates report报出的重复行必须处理否则 xtset 直接拒绝。第二查时间变量的编码很多数据库的年份是2020年这种中文串destring转不了得用encode生成数值型分类变量但encode生成的值取决于字母序跨年份未必单调稳妥做法是destring year, replace ignore(年)。第三查极端值winsor2 roa size lev, cuts(1 99) replace是实证分析里的常规处理但要在正文里写清楚缩尾比例。第四查变量量纲size 常用总资产取对数lev 是资产负债率本身就在 0 到 1 之间两者放同一个回归里系数差好几个数量级虽然不影响显著性但会让系数表的可读性变差。3. 固定效应、随机效应与 Hausman 检验xtreg 建模的完整链路3.1 三种设定的计量含义混合 OLS、FE、RE 到底差在哪三个模型写出来都是 $y_{it} \alpha \beta x_{it} u_i \varepsilon_{it}$差别全在 $u_i$ 上。模型命令对个体效应的假设能否估计时不变变量适用场景混合 OLSreg y x不存在 $u_i$个体效应被挤进扰动项能个体间差异确实不重要或数据本身就是随机抽样固定效应xtreg y x, fe$u_i$ 与 x 任意相关作为待估参数吸收不能时不变变量被组内变换消掉个体异质性与解释变量相关最常见的实证设定随机效应xtreg y x, re$u_i$ 与 x 不相关$u_i$ 服从正态分布能抽样接近随机、需要估计性别/区位等时不变变量固定效应的代价很实在所有不随时间变化的变量行业、所有制、地区都会被组内去均值消掉系数根本报不出来。如果你的核心解释变量是是否国有企业这种时不变的就只能走 RE 或者用 Hausman-Taylor 一类的工具变量设定。3.2 xtreg 最小可复现命令与关键参数use firm_panel.dta, clear xtset firm_id year * 模型一混合 OLS聚类到个体层面 reg roa size lev i.year, vce(cluster firm_id) estimates store pooled * 模型二个体固定效应 年度固定效应双向固定效应 xtreg roa size lev i.year, fe vce(cluster firm_id) estimates store fe * 模型三随机效应 xtreg roa size lev i.year, re vce(cluster firm_id) estimates store re * 只放个体固定效应的对照版本 xtreg roa size lev, fei.year是把年份展开成一组虚拟变量作用是把宏观层面的共同冲击经济周期、政策变化从个体效应里剥离出来这就是常说的双向固定效应。vce(cluster firm_id)声明同一公司跨年度的扰动项可以任意相关是面板回归里最该养成的习惯它和robust的区别在于robust只处理异方差cluster同时处理异方差和组内自相关。注意聚类稳健标准误在个体数偏少比如少于 30 个省份时标准误本身会被低估这时候常见的补救是用boottest做自举或者退回到带小样本调整的设定。3.3 模型选择的三道检验F 检验、LM 检验、Hausman 检验检验命令与位置原假设判读F 检验xtreg, fe输出底部的F test that all u_i0所有个体效应为 0p0.05 说明个体效应存在混合 OLS 不合适LM 检验RE 之后跑xttest0$\sigma_u^2 0$p0.05 说明随机效应成立混合 OLS 不合适Hausman 检验hausman fe re个体效应与解释变量不相关p0.05 选 FEp0.05 倾向 RE* 不带聚类的版本用来做 Hausman聚类会让检验的渐近条件不成立 xtreg roa size lev, fe estimates store fe_h xtreg roa size lev, re estimates store re_h xttest0 hausman fe_h re_h * 报出 model fitted on these data fails to meet the asymptotic assumptions * 时改用 sigmamore 选项或安装 xtoverid 走回归型检验 hausman fe_h re_h, sigmamore ssc install xtoverid, replace xtreg roa size lev, fe xtoveridHausman 检验的经典坑是带聚类稳健标准误时hausman常常直接报错退出因为两个模型的方差协方差矩阵不再满足检验要求的渐近条件。稳妥做法是先用不带聚类的版本跑检验定模型定完之后再用带聚类的版本报结果并在表格注释里说明。另外要注意Hausman 检验的功效随样本量变化很大样本极大时微小的相关也会被判成显著最后选了 FE但 RE 结果作为稳健性检验放附录是审稿人普遍接受的写法。3.4 高维固定效应与聚类稳健标准误的落地写法当固定效应不只是公司和年份还要吸收省份 × 年份行业 × 年份这种交乘层面时xtreg的i.语法会撑不住。ssc install reghdfe, replace ssc install ftools, replace * 吸收三个维度的固定效应聚类到公司层面 reghdfe roa size lev, absorb(firm_id year prov#year) vce(cluster firm_id) * 多向聚类同时按公司和年份聚类 reghdfe roa size lev, absorb(firm_id year) vce(cluster firm_id year)absorb()里放需要吸收的高维虚拟变量组合ftools是reghdfe的底层依赖必须先装。vce(cluster firm_id year)是双向聚类适合处理同时存在截面相关和时序相关的面板代价是自由度消耗快个体数或期数太少时结果不稳。和xtreg, fe相比reghdfe报告的 R² 是组内 R²自由度的算法也不一样同一份数据两个命令的 t 值会略有差别这是正常的不必反复调试试图让它们对齐。4. 内生性与动态面板xtivreg、xtabond2 与 GMM 的适用门槛4.1 内生性的三种来源与对应的面板工具固定效应能消掉的是不随时间变化的遗漏变量。真正棘手的是随时间变化的遗漏变量、双向因果和测量误差这三类在面板数据里对应三套不同的工具。内生性来源具体表现识别策略Stata 命令时变遗漏变量存在随时间变化且影响 y 的公司特征未入模找外生工具变量做 2SLSxtivreg y x (endog iv), fe双向因果roa 影响 levlev 反过来影响 roa滞后解释变量作工具xtivreg、xtabond2测量误差关键变量填报口径变动工具变量法纠正衰减偏误xtivreg动态面板的 Nickell 偏误模型含滞后因变量FE 估计不一致差分 GMM / 系统 GMMxtabond、xtdpdsys、xtabond2判断该不该上 GMM 有个朴素标准模型里的核心解释变量在理论上和当期扰动项相关比如研发投入和当期业绩互相影响且个体数 N 大、时间期数 T 小典型是 N 上千、T 十几这才符合 GMM 的渐近条件。如果 T 都三十几了直接上 FE 加聚类偏误反而更可控。4.2 滞后算子与内生、前定、外生变量的划分Stata 的时间序列算子在面板里同样适用L.x是一阶滞后L2.x是二阶滞后F.x是前导D.x是一阶差分。GMM 估计的全部逻辑就是用变量的滞后项去当工具。划分标准是行为的时点。外生变量指当期和滞后期都与当期扰动项不相关前定变量predetermined指当期扰动项不影响它但它的滞后值可以当工具内生变量指当期相关只能用二阶以上的滞后值当工具。把三者放错位置是 GMM 回归结果经不起推敲的头号原因。经验做法是模型里的滞后因变量一定是内生政策冲击一类外生其余的先用前定处理跑完之后看检验再调。4.3 xtabond2 的双步系统 GMM 命令与必查诊断ssc install xtabond2, replace * 形态一差分 GMM只用滞后水平项做工具 xtabond2 roa L.roa size lev, /// gmm(L.roa, lag(2 4)) iv(size lev) /// noleveleq twostep robust small * 形态二系统 GMM差分方程与水平方程联立 xtabond2 roa L.roa size lev, /// gmm(L.roa, lag(2 4)) gmm(size, lag(1 3)) iv(lev) /// twostep robust smallgmm()声明内生变量及其可用的滞后阶区间lag(2 4)表示用二阶到四阶滞后当工具区间宽度直接决定工具变量个数。iv()里放严格外生变量。noleveleq表示只估计差分方程去掉就是系统 GMM。twostep是两步估计效率更高但标准误下偏必须配robust用 Windmeijer 校正。small让小样本下报 t 统计量而不是 z 统计量。Stata 自带的xtabond对应差分 GMMxtdpdsys对应系统 GMM语法更简洁但灵活度低功能上xtabond2更常被实证论文采用。诊断项输出位置期望结果不达标怎么改AR(1)Arellano-Bond test for AR(1)p 0.05正常现象一阶自相关本来就该存在不必处理AR(2)Arellano-Bond test for AR(2)p 0.10增加滞后阶或把内生变量改成前定设定Hansen JHansen test of overid.0.10 p 0.80p 过小说明工具外生性存疑p 大到接近 1 说明工具堆太多工具数Number of instruments不能超过个体数 N压缩gmm()的滞后区间从 lag(2 4) 收到 lag(2 3)工具变量个数超过个体数是 GMM 实务里最常翻车的地方Hansen 检验会因为工具过多而失去功效p 值虚高到 1.000看起来通过了实际上检验已经瘫了。Roodman 那套判读经验被反复引用核心就是一句工具数尽量压到个体数以下并让 Hansen 的 p 值落在中间区间而不是贴着 1。4.4 工具变量有效性排查xtivreg 与 xtoverid不是所有内生性都要上 GMM静态模型用面板 2SLS 更直接。* lev 内生用其滞后一期做工具 xtivreg roa size (lev L.lev), fe vce(cluster firm_id) * 过度识别检验工具数多于内生变量数时 xtoverid * 弱工具变量排查看第一阶段 F 值 xtivreg roa size (lev L.lev), fe firstfirst选项会打印第一阶段回归。第一阶段 F 值低于 10 通常被视作弱工具的信号但这套 F 值阈值本来是给截面数据设的面板里要更谨慎滞后一期作为工具在存在序列相关时很容易失效。xtoverid给出的是 Sargan-Hansen 型检验原假设是工具变量外生p 大于 0.1 才谈得上没有拒绝。真要写进论文至少同时报 FE、面板 2SLS、系统 GMM 三列结果让读者看到系数方向一致、量级接近才算把内生性这道坎过了。5. 面板结果的稳健性收尾xtunitroot 平稳性检验与 esttab 导出5.1 长面板的伪回归排查xtunitroot 三种检验怎么选T 比较长比如二十年以上的宏观面板做回归前要先排除伪回归。xtset firm_id year * LLC假设所有个体有相同的自回归系数 xtunitroot llc roa, lags(1) * IPS允许每个个体有自己的自回归系数更贴近现实 xtunitroot ips roa, lags(1) * Fisher 型把每个个体的单位根检验 p 值合并 xtunitroot fisher roa, dfuller lags(1)LLC 的原假设是所有个体都存在单位根IPS 则允许异质自回归系数两者结论冲突时以 IPS 为准更稳妥。lags()里的阶数可以用lags(1)固定也可以用lags(aic 4)让软件按信息准则选。T 小于 15 的面板不建议做单位根检验功效太低检验结果基本等于随机数。检验出非平稳之后如果变量之间同阶单整可以走面板协整xtwest roa size lev, lags(1 1) leads(0 0) constant trend四个变量以内用这条命令足够变量多了再考虑分组检验。5.2 系数表导出的三个细节ssc install estout, replace esttab fe re using panel_result.rtf, replace /// b(%9.3f) se(%9.3f) star(* 0.1 ** 0.05 *** 0.01) /// stats(N r2_w r2_o, fmt(%9.0f %9.3f %9.3f) /// labels(观测数 组内R2 总体R2)) /// mtitles(固定效应 随机效应) /// note(括号内为聚类到公司层面的稳健标准误)第一个细节是stats()里报哪个 R²。固定效应下r2_w是组内 R²、r2_o是总体 R²、r2_b是组间 R²三者含义完全不同报错一个审稿人一眼就能看出来。第二个细节是星号标准必须和note()里的标准误说明对上普通标准误和聚类标准误的显著性水平经常不一样。第三个技巧是导出前先estimates store并给每个模型起可读的名字这样mtitles()里写中文表头不会串位如果变量名是英文缩写用label variable roa 总资产收益率提前设好标签导出时加label选项就能直接出中文行名省掉最后在 Word 里手改一遍变量的功夫。本文还有配套的精品资源点击获取
返回列表