news 2026/9/17 15:17:48

Stata面板数据实战:xtset清洗、xtreg模型与动态GMM

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Stata面板数据实战:xtset清洗、xtreg模型与动态GMM

简介:面板数据是同时包含截面与时间维度的追踪数据,核心在于分离个体不随时间变化的异质性与时间冲击。Stata中常用xtset声明面板结构,再用固定效应、随机效应或组间模型进行xtreg回归,并通过Hausman检验判断模型取舍;当存在内生性或调整惯性时,工具变量、动态面板GMM等方法进一步扩展估计能力。其技术价值在于提升标准误准确性、控制遗漏变量并支持因果推断,广泛应用于劳动、健康与企业调查等场景。围绕wage.dta的清洗、描述绘图、xtreg模型选择以及xtivreg2、xtabond2、面板离散选择与计数模型,可形成从数据准备到进阶计量的工程化实操路径。

1. 从wage.dta出发:面板数据在Stata里的定义与清洗

很多人拿到面板数据的第一反应是直接跑reg,把4711个妇女、1968到1988年的调查记录当成混合截面,结果标准误被严重低估,个体效应全进了残差。wage.dta这个数据集恰好是个典型:idcode是截面,year是时间,每个妇女被追踪多次,ln_wagehoursgradetenure这些变量既有组内变化也有组间差异。如果不先xtset idcode year,Stata 根本不知道哪些观测属于同一个人,后续所有xt开头的命令都拒绝执行。面板数据分析在统计计量里的价值就在这里:它能把“个体不随时间变化的特征”和“随时间变化的冲击”拆开,固定效应、随机效应、动态面板都是围绕这个拆分做文章。适合已经做过线性回归、想往实证分析方向走的从业者,尤其是处理劳动、健康、企业调查这类追踪数据的人。

2. 面板数据描述与绘图:xtset/xtsum/xtdescribe/xttab/xttrans/xtline全流程

2.1 xtset定义截面与时间,别让字符串变量卡住

面板操作的第一步是声明结构。xtset要求截面变量和时间变量都是数值型整数,如果idcodeyear是字符串,先用encode转换:

* 假设 idcode 是字符串型,生成数值型新变量 id_num encode idcode, gen(id_num) * 再声明面板:id_num 为截面,year 为时间 xtset id_num year

encode会生成带标签的数值变量,每个数值对应原字符串的一个取值,标签保留原值。xtset id_num year之后,Stata 内部按截面和时间排序,L.F.这类时间序列算子才能用。如果只写xtset id_num,表示每个截面内的观测顺序无关,适合家庭成员这类没有明确时间维度的数据。对于wage.dta,直接xtset idcode year即可,因为两个变量本来就是数值型。

2.2 xtsum拆分组内与组间变异

xtsumsummarize的面板版,它把总变异拆成组间和组内两部分。看hours的描述统计量:

xtsum hours

输出会给出 overall、between、within 三行。between 的标准差反映不同妇女平均工作时间的差异,within 的标准差反映同一个人不同年份的波动。做固定效应模型时,组间变异被消掉,只有 within 变异参与估计,所以如果某个变量的 within 标准差很小,固定效应估计会很不稳定。这个命令在选模型之前就能帮你判断哪些变量适合进固定效应。

2.3 xtdescribe看数据结构,xttab和xttrans看分布与转移

xtdescribe显示每个截面被观测到的年份模式,默认最多列9种模式:

xtdescribe * 想控制显示宽度和模式数量 xtdescribe, patterns(12) width(80)

patterns(#)指定显示多少种观测模式,width(#)控制每行字符宽度。如果数据是强平衡面板,会看到所有截面都是1到21年连续;如果大量截面缺失,就要考虑是否做平衡处理。

xttabxttrans针对分类变量。比如婚姻状态msp

* 分布频率:组内、组间、总体 xttab msp * 转移概率:从t年到t+1年的状态迁移 xttrans msp, freq

xttab会告诉你每个取值在总体、组间、组内各占多少比例。xttrans输出转移矩阵,行是当期状态,列是下一期状态,freq选项同时显示频数。这对动态面板建模很关键——如果msp的转移概率几乎不变,滞后项的解释力就弱。

2.4 xtline按截面画时间趋势,别一次画几千条

xtline默认给每个截面单独画时间序列图。wage.dta有4711个截面,全画出来就是一团墨。常见做法是用范围语句只看前几个截面:

* 前50个观测构成前4个截面,画hours的时间趋势 xtline hours in 1/50 * 如果想叠在一张图上对比 xtline hours in 1/50, overlay

overlay把多个截面画到同一坐标系,适合截面数少的情况。i()t()选项可以临时指定其他截面和时间变量,但必须成对出现,且允许字符串型截面变量。绘图前最好先xtdescribe确认前几个截面的年份是否连续,否则图上的断点会误导判断。

提示:所有xt命令都要求先xtsettsset。如果报错“not sorted”,先执行sort idcode year再重新声明。

3. 固定效应与随机效应:xtreg的be/fe/re三兄弟与Hausman检验

3.1 生成平方项和虚拟变量,把非线性关系纳进来

工资方程里年龄、总工作年数、现岗任职时间对ln_wage的影响通常不是线性的,先造平方项:

gen age2 = age * age gen exp2 = ttl_exp * ttl_exp gen tenure2 = tenure * tenure * race==2 表示黑人,生成0/1虚拟变量 gen byte black = (race == 2)

gen byte black = (race == 2)利用了Stata的逻辑表达式:条件成立返回1,否则0。byte指定存储类型,节省内存。平方项和水平项同时进模型,可以捕捉先升后降的年龄-工资曲线。注意race后是两个等号,一个等号是赋值。

3.2 组间效应模型:先看纯截面差异

组间回归只用每个截面的均值,忽略时间维度:

xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, be

选项be表示 between estimator。它回答的是“平均受教育年数高的人,平均工资是否更高”,不控制个体固定特征。输出中的R-sq是组间拟合优度。这个模型常作为基准,和固定效应、随机效应对比。如果befe的系数符号相反,说明存在严重的个体效应与解释变量相关。

3.3 固定效应与随机效应的命令写法

固定效应:

xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, fe

随机效应:

xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, re

fe通过去均值消掉不随时间变化的个体效应,blacksouth这类不随时间变化的变量会被自动剔除(除非它们和年份交互)。re把个体效应视为随机误差的一部分,要求个体效应与所有解释变量不相关。选择依据通常用 Hausman 检验:先存固定效应结果,再存随机效应结果,然后比较。

xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, fe estimates store fe_result xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, re estimates store re_result hausman fe_result re_result

原假设是随机效应估计一致,如果 p 值小于0.05,拒绝原假设,选固定效应。注意hausman要求两个模型使用相同的样本,如果fe剔除了black等变量,需要先确保样本一致。

3.4 模型预测与系数解释

估计完模型后可以预测个体效应和拟合值:

xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, fe predict ln_wage_hat, xb predict u_fe, u predict e_fe, e

xb是线性预测值,u是估计的个体效应,e是残差。固定效应模型中u与解释变量相关,不能直接用于随机效应假设检验。解释系数时,平方项让边际效应变成β_age + 2*β_age2*age,在均值处算出来才有意义。

模型选项核心假设不随时间变量
组间be忽略时间变异可估计
固定效应fe个体效应与X相关被吸收
随机效应re个体效应与X不相关可估计

注意:xtreg, fe会自动报告 F 检验,原假设是所有个体效应相等。如果 F 检验不显著,混合 OLS 可能就够了,不必强行上固定效应。

4. 长面板、工具变量与动态面板:xtivreg2、xtdpdsys的落地写法

4.1 长面板的reshape与模型选择

长面板指时间维度 T 较大、截面 N 较小的数据,比如几十个省份、几十年。wage.dta是 N=4711、T=21,属于短面板。如果数据原本是宽表,用reshape long转成长表:

* 假设宽表有 hours1968 hours1969 ... hours1988 reshape long hours, i(idcode) j(year) xtset idcode year

长面板里,序列相关和异方差更突出。常见做法是用xtreg, fe加聚类稳健标准误:

xtreg ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, fe vce(cluster idcode)

vce(cluster idcode)允许同一妇女不同年份的误差相关,标准误会比默认的更大,但更可信。如果 T 很大,还可以考虑xtpcse处理面板异方差和同期相关,但那是另一个命令族。

4.2 面板工具变量法:xtivreg2处理内生性

当解释变量与误差项相关时,固定效应也救不了,需要工具变量。xtivreg2是常用命令,先安装:

ssc install xtivreg2, replace

基本语法:

xtivreg2 ln_wage (grade = motheduc fatheduc) age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, fe

这里grade是内生变量,motheducfatheduc是工具变量,fe指定固定效应。括号内写“内生变量 = 工具变量”,括号外是外生变量。输出会报告弱工具变量检验(第一阶段 F 值)和过度识别检验(Sargan 或 Hansen J)。如果第一阶段 F 小于10,工具变量偏弱,估计量有偏。注意工具变量必须与内生变量相关、与误差项不相关,这两个条件一个靠统计检验,一个靠理论。

4.3 动态面板:xtdpdsys与滞后因变量

动态面板把滞后因变量L.y放进解释变量,用来捕捉调整惯性。但L.y与个体效应相关,固定效应估计会偏。Arellano-Bond 和 Blundell-Bond 系统 GMM 是主流做法:

ssc install xtabond2, replace * 一阶差分 GMM xtabond2 ln_wage L.ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, gmm(L.ln_wage) iv(grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south) noleveleq * 系统 GMM xtabond2 ln_wage L.ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, gmm(L.ln_wage) iv(grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south) twostep

gmm()指定内生变量的 GMM 工具集,iv()指定外生变量的工具集,noleveleq表示只用差分方程,twostep用两步估计。xtdpdsys是 Stata 官方命令,语法类似:

xtdpdsys ln_wage L.ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, lag(1/2)

lag(1/2)指定滞后阶数。动态面板做完后必须做自相关检验(AR(1) 允许,AR(2) 不允许)和工具变量有效性检验。如果 AR(2) 显著,说明滞后阶数不够或模型设定有问题。

4.4 常见坑:工具变量太多会弱化检验

GMM 里工具变量数量不要超过截面数,否则会过度拟合内生变量,Sargan 检验失效。常见做法是把gmm()里的滞后阶数限制在lag(2 4)之类,不要把所有滞后都塞进去。另外,xtivreg2xtabond2对缺失值处理不同,估计前先xtset并检查样本是否一致。

方法命令适用场景关键检验
固定效应+聚类xtreg, fe vce(cluster)长面板,异方差和序列相关F检验、聚类标准误
面板工具变量xtivreg2解释变量内生第一阶段F、过度识别
差分GMMxtabond2, noleveleq动态面板,短面板AR(2)、Sargan
系统GMMxtabond2, twostep动态面板,变量弱外生AR(2)、Hansen J

提示:xtivreg2xtabond2不是 Stata 自带命令,需要联网安装。安装前确认ssc install可用,或者用net install指定源。

5. 面板离散选择与计数模型:从xtlogit到随机效应Tobit的进阶技巧

面板数据里被解释变量不总是连续的。wage.dtaunion是0/1变量,msp也是,这类要用面板离散选择模型。Stata 提供xtlogitxtprobit,支持fere。固定效应 logit 只使用那些被解释变量随时间变化的截面,样本损失很大;随机效应 logit 用全部样本,但要求个体效应与解释变量不相关。命令格式:

* 随机效应 logit xtlogit union grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, re * 固定效应 logit xtlogit union grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, fe * 报告边际效应(在均值处) margins, dydx(*)

margins计算平均边际效应,比原始系数好解释。如果被解释变量是计数,比如一段时间内换工作次数,用xtpoisson

xtpoisson tenure grade age age2 ttl_exp exp2 black not_smsa south, re * 检验过度分散,若显著则考虑负二项 xtnbreg tenure grade age age2 ttl_exp exp2 black not_smsa south, re

xtpoisson假设均值等于方差,实际数据常过度分散,xtnbreg放松这个假设。随机效应 Tobit 用于被解释变量有删失的情况,比如工资报告有上限:

xttobit ln_wage grade age age2 ttl_exp exp2 tenure tenure2 black not_smsa south, ll(0) ul(3)

ll(0)ul(3)指定下删失和上删失点。如果只是左删失,写ll(0)即可。估计后同样可以用margins看边际效应。这些模型在实证分析里出现频率很高,尤其是劳动经济学和健康经济学。一个实用技巧:先跑随机效应版本,再用 Hausman 检验对比固定效应,但固定效应 Tobit 没有标准实现,通常只能靠随机效应加稳健标准误。

注意:xtlogit, fe会丢掉所有结果不随时间变化的截面,如果union对很多人一直不变,固定效应 logit 的样本可能少得可怜。先xttab union看组内变异比例,再决定是否用 fe。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 15:16:31

基于SpringBoot+Vue的公交运营管理系统:三角色权限与Token鉴权

简介:这是一份面向高校计算机专业毕业设计场景的完整论文文档,主题为基于SpringBoot与Vue的城市公交运营管理系统,适合正在准备毕设、课程设计或需要参考前后端分离项目写法的学生与开发者。压缩包内共1个docx文件,约4.68MB&#…

作者头像 李华
网站建设 2026/9/17 15:15:23

ASP物流管理系统毕业设计:三层架构、数据库与IIS部署全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 15:15:10

谷歌Home接入MCP:AI智能体可控制你的家

编者按:智能家居行业喊了多年的「AI 管家」,正在以一种更务实的方式落地——不是再造一个更聪明的语音助手,而是干脆把家里的设备控制权,交给用户自己选择的 AI。 谷歌 Home 向第三方 AI 智能体开门 据 TechCrunch 报道&#xff0…

作者头像 李华
网站建设 2026/9/17 15:13:09

Flask+MySQL+Tkinter实战:轻量级租房系统架构与数据一致性设计

简介:本资源是一份面向Python初学者与中级开发者的出租房管理系统实战项目文档,适用于计算机专业学生、物业系统开发者及全栈学习者,解决中小型租赁场景下的信息化管理难题。文档以Flask后端架构与Tkinter桌面GUI为核心,完整覆盖数…

作者头像 李华