伍德里奇计量习题 Stata 复现:从 OLS 到面板与工具变量
2026/9/18 5:41:50 网站建设 项目流程

简介:这份《伍德里奇计量经济学部分计算机习题详解STATA.pdf》面向正在学习伍德里奇《计量经济学》并用Stata完成课后计算机习题的本科生、考研复习者及备考人群,尤其适合需要核对异方差章节操作结果与解题思路的读者。压缩包内仅含1个PDF文件,大小约1.12MB,轻量便携,可直接在电脑或平板上阅读。内容围绕第8章计算机习题展开,涉及方差随性别变化的模型设定、异方差模型参数估计、稳健标准误与通常标准误对比、完全怀特检验、特殊怀特检验、LM与F统计量及p值计算,并对对数变换后异方差影响减弱等现象给出解释。文档以Stata回归截图配合逐步结果说明,便于读者对照复现模型、检查代码输出并理解考试常见考点。目前已有6686人学习下载,适合用作计量经济学课程作业、期末复习与Stata实操排错参考。

1. 伍德里奇计算机习题用 Stata 复现的真实门槛

很多人拿到伍德里奇《计量经济学导论》的计算机习题部分,第一反应是打开 Stata,把题目里的变量名敲进去跑一条regress,然后对着 PDF 里给的系数表看能不能对上。真跑起来就会发现障碍根本不在回归命令本身:习题给的是行为描述而不是数据字典,你要先判断这是横截面、时间序列还是面板结构,要判断该用稳健标准误还是普通标准误,要判断样本里那几个缺失值到底该删还是该保留。伍德里奇教材的习题编号体系(CE 系列,比如 CE4.3 对应第 4 章第 3 题)本身就是在训练这套判断,而不是训练你背命令。把 STATA 和这份 PDF 放在一起讲,讲的就是把纸面题目翻译成可复现 do 文件的全过程,适合正在做课程作业、准备毕业论文实证部分,或者想快速补上计量实操这一环的从业者。

2. 从 PDF 题目到 wooldridge 数据集的读取与变量核对

2.1 先解决数据从哪来

伍德里奇教材配套的数据集是公开的,Stata 用户最常见的获取方式是通过 SSC 上的数据包,而不是去网上零散下载.dta文件再手动对齐变量名。前者一次安装就能拿到几十个.dta,文件名和教材里提到的数据名基本一致,省掉了重命名的麻烦。

* 安装教材配套数据集包,只需执行一次 ssc install wooldridge, replace * 查看包里包含哪些数据集 sysuse dir ado describe wooldridge * 读取一个横截面数据集 use bwght, clear describe

第一段代码安装的是一个数据集集合包,不是分析命令包,它只把.dta文件放到你的个人 ado 路径下。use bwght, clear里的clear是关键参数,没有它而当前内存中有未保存数据时,Stata 会直接报错中断。describe输出的是变量清单、存储类型、显示格式和标签,这一步决定了你后面能不能正确写出回归式。特别提醒:习题 PDF 里描述变量用的是中文或英文全称,而.dta里是缩写,比如家庭收入在 bwght 数据里叫faminc,吸烟支数叫cigs,出生体重叫bwght,先做变量名映射再动手。

2.2 用极值和缺失值检查防止系数跑偏

习题里经常有一句话轻描淡写地带过:“剔除信息不全的样本”或“删去极端观测”。这句话落到实处就是缺失值统计和极值定位,靠summarize的返回值就能完成,不需要额外命令。

* 描述统计,同时拿到最小值最大值到返回值 summarize bwght cigs faminc, detail * 直接调用返回值判断极值 display "bwght 最小值 = " r(min) " 最大值 = " r(max) * 缺失值计数:每行返回某变量的 missing 个数 misstable summarize bwght cigs faminc * 生成一个完整样本指示变量 gen byte insample = !missing(bwght, cigs, faminc) count if insample == 1

detail参数会额外输出偏度、峰度、分位数,排气量、收入这类右偏变量一眼就能看出是否需要取对数,伍德里奇习题里大量使用lwagelbwght这种对数变量,选型依据就来自这一步。r(min)r(max)summarize留下的临时返回值,只能在紧接着的下一条命令里使用,中间插了别的命令就会被覆盖,这是新手最常踩的坑。misstable summarize给出每个变量的缺失条数以及多个变量联合缺失的样本量,判断“删除缺失”会不会把样本砍掉一大块。最后生成的insample变量比反复写if !missing(...)更可控,做分组和回归时直接引用它即可。

2.3 面板与时间序列数据的结构声明

同一条regress命令,在横截面数据上是对的,在时间序列或面板数据上可能直接给你错误的自由度、错误的 t 值。区别就在于有没有声明数据结构。

数据类型声明命令教材习题常见场景漏声明后果
横截面不需要工资方程、房价方程
时间序列tsset 时间变量通胀与失业率、利率与赤字滞后项全错、DW 统计量不输出
面板xtset 个体 时间工资面板、犯罪率面板、企业投资无法用xtreg,聚类标准误无效
* 时间序列:年度数据 use phillips, clear tsset year * 面板:个体编号 + 年份 use wagepan, clear xtset nr year xtdescribe

tsset year之后 Stata 才知道L.inflation是上一年通胀、F.unem是下一年失业率,才不会在你写L.时报“时间变量未设定”。xtset nr yearnr是个体标识,year是时间标识,第二个参数可省略但强烈建议写上,因为面板不平衡时xtdescribe的输出会直接告诉你缺失了哪些年份组合。xtdescribeT值(每期观测数)与n值(个体数)决定后面用固定效应还是随机效应,也决定聚类标准误要聚到哪一层。

3. 横截面习题的回归链条:从 OLS 到稳健标准误再到亚组比较

3.1 基准回归与系数解释的对应关系

横截面习题占比最高,套路也最固定:先跑一个基准 OLS,再逐个添加控制变量,最后按题目要求解释某个系数。难点不在跑,在于你写的系数解释必须和数据变换方式严格对应。

* 出生体重对吸烟与家庭收入的基础回归 regress bwght cigs faminc parity male, vce(robust) * 因变量与部分自变量取对数后的弹性形式 gen lbwght = log(bwght) gen lfaminc = log(faminc) regress lbwght cigs lfaminc parity, vce(robust) * 查看回归后可用统计量 ereturn list

vce(robust)是横截面题里最该默认加上的参数,伍德里奇教材在异方差章节之后几乎默认使用稳健标准误,因为出生体重、工资这类变量的误差方差明显随解释变量变化。lbwghtlfaminc同时取对数时,lfaminc的系数直接读作弹性,而cigs仍是水平值,系数要按“每多一支烟,出生体重变化百分之多少”来换算,这就是log-level模型的解释规则。ereturn list会列出刚才那次回归保留的全部结果矩阵,包括e(b)e(V)e(r2),写习题时如果需要手工计算某个检验量,直接从这些返回值里取,避免手抄导致的舍入误差。

3.2 异方差检验与标准误的取舍

题目常问“是否存在异方差”,回答它需要的是检验输出而不是目测残差图。Stata 里对应的操作成本很低,但要注意检验的零假设方向。

regress bwght cigs faminc parity male estat hettest estat hettest cigs faminc, iid * 怀特异方差稳健的 F 检验 test cigs faminc

estat hettest的零假设是“同方差”,p 值小于 0.05 才说明存在异方差;这一点和很多人的直觉相反,误读了就会把结论写反。带iid参数时,检验假设误差独立同分布,用它对解释变量做辅助回归,适合样本量不大的情况。test命令做的是系数的联合显著性检验,在异方差存在时必须配合稳健协方差矩阵一起看,否则 F 统计量的分布假设不成立,p 值不可信。判断题干要求写“普通标准误”还是“稳健标准误”时,看教材那一章的主题,第 8 章之后基本都要求稳健。

3.3 亚组分析:分组回归与交互项两条路

习题里出现“分别对男性和女性估计”“教育回报在高经验组和低经验组是否不同”这类要求,本质是亚组分析。Stata 里有两条路,选错会得出不同的结论。

* 路线一:分组跑回归 regress lwage educ exper tenure if female == 0, vce(robust) estimates store male_grp regress lwage educ exper tenure if female == 1, vce(robust) estimates store female_grp * 路线二:全样本加交互项 regress lwage educ exper tenure i.female c.educ#i.female, vce(robust) testparm i.female c.educ#i.female

分组回归的好处是每一组的系数都是组内单独估计的,包括常数项和所有控制变量的斜率都可以不同;代价是它没法直接检验“两组教育回报的差异是否显著”,要靠suest或手动比较置信区间。交互项写法把所有组放进同一个样本,c.educ#i.female这一项直接给出教育回报的组间差异,testparm一步就能给出联合显著性。样本量小的时候优先用交互项,因为分组会把样本切薄,稳健标准误在小样本下容易失真。两种路线都要求estimates store保存结果,否则后续estimates table male_grp female_grp无法对照输出,这一点在写习题答案表格时非常实用。

4. 时间序列与面板习题:滞后项、固定效应与聚类标准误

4.1 时间序列的自相关检验与 Newey-West 修正

时间序列习题绕不开自相关。教材里给的检验是回归残差对滞后残差做辅助回归,Stata 把这一步做成了回归后命令,但你得先正确设定时间变量。

use phillips, clear tsset year regress inf unem estat dwatson estat bgodfrey, lags(1 2) * 自相关存在时改用 Newey-West 标准误 newey inf unem, lag(2)

estat dwatson给出德宾-沃森统计量,数值接近 2 说明无一阶自相关,接近 0 说明正自相关,接近 4 说明负自相关,这个统计量只有在tsset之后才可用。estat bgodfrey是布罗施-戈弗雷检验,lags(1 2)表示同时检验一阶和二阶自相关,比 DW 更灵活,因为它允许右侧出现滞后因变量。newey命令用 Newey-West 方法修正标准误,lag(2)是截断参数,表示允许自相关一直延续到二阶,取值通常按经验法则floor(4*(T/100)^(2/9))估算,或者直接按题目给定值填。回归系数本身不会因newey改变,变的只有标准误和 t 值,很多人第一次用会以为系数出错了。

4.2 面板固定效应与聚类层级的对应

面板习题的核心判断是“个体效应是否与解释变量相关”。相关就用固定效应,不相关且想估计不随时间变化的变量(比如性别、种族)才用随机效应,并用 Hausman 检验来裁决。

use wagepan, clear xtset nr year * 固定效应 xtreg lwage educ exper expersq, fe vce(cluster nr) * 随机效应 xtreg lwage educ exper expersq, re vce(cluster nr) * Hausman 检验 estimates store fe_res xtreg lwage educ exper expersq, re estimates store re_res hausman fe_res re_res

vce(cluster nr)里的聚类层级必须和xtset的第一层一致,也就是按个体聚类,因为同一个人不同年份的误差几乎必然相关,不聚类会严重低估标准误。fe估计会先做组内去均值,因此所有不随时间变化的变量会被自动剔除,这也是随机效应能估计教育年限而固定效应在某些设定下不能的原因。Hausman 检验的零假设是“随机效应一致”,p 值小于 0.05 就拒绝随机效应、选择固定效应。要注意 Hausman 检验要求两次估计使用同一批样本,如果随机效应里包含了个体层面不随时间变化的变量,样本可能不一致,这时需要加sigmamore参数或改用xtoverid

4.3 工具变量题的两步法与弱工具检验

伍德里奇教材里工具变量章节的习题给的信息量最大,因为它同时涉及内生性判断、工具相关性检验和过度识别检验三件事,缺一步答案就不完整。

* 教育年限内生,用近邻是否四年制大学作为工具 ivregress 2sls lwage exper expersq (educ = nearc4), vce(robust) * 第一阶段单独跑,看工具变量的显著性 regress educ nearc4 exper expersq, vce(robust) test nearc4 * 过度识别检验(工具数多于内生变量数时才有意义) estat overid

ivregress 2sls的括号里左边是内生变量,右边是工具变量,括号外是所有外生变量,括号的位置写错 Stata 不会报错但模型含义完全变了。第一阶段的test nearc4是在检查工具相关性,t 值过低说明弱工具,此时 2SLS 估计量有限样本偏误可能比 OLS 还大,教材里通常会要求你报告第一阶段的 F 统计量。estat overid只能在工具变量个数大于内生变量个数时运行,它检验的是工具外生性假设,零假设成立意味着各工具给出的估计一致。三个检验必须一起报告,只报点估计是习题答案里最常见的扣分点。

5. 把 Stata 输出与 PDF 习题答案逐项对账的实用技巧

习题做完只是第一步,能不能和 PDF 里给出的参考答案对上,考验的是输出管理能力。手抄屏幕上的系数既慢又容易错,正确做法是用日志文件把整次分析的所有输出落盘,再逐行核对。

* 开启日志,把文本输出与 SMCL 输出分别保存 log using "ce_answers.log", replace text log using "ce_answers.smcl", replace use bwght, clear regress bwght cigs faminc parity male, vce(robust) estimates store m1 use wage1, clear regress lwage educ exper tenure, vce(robust) estimates store m2 * 把多个模型汇总成一张对照表 estimates table m1 m2, star(0.10 0.05 0.01) stats(N r2 r2_a) log close _all

log using同时开两个日志是有意为之:.log是纯文本,方便用脚本做二次提取和 diff 比较;.smcl保留格式,方便打印或转成 PDF 存档。estimates tablestar()参数按 10%、5%、1% 三档自动标注显著性星号,stats(N r2 r2_a)把样本量和两种 R² 一起列在表底,正好对应教材表格的排版习惯。对数似然、F 统计量可以用stats(F ll)加上。

对账时最容易出偏差的三类情况值得提前防住。一是样本量不一致,多半是缺失值处理方式与答案不同,用count if e(sample)在每次回归后打印实际参与估计的样本量,一行命令就能定位。二是标准误类型不同,参考答案用的是普通标准误而你加了vce(robust),系数会完全一致但 t 值和 p 值不同,遇到这种情况先看题目有没有明确要求异方差稳健。三是变量单位不同,教材里工资、收入常以美元或千美元计量,PDF 描述里一句“以千美元计”如果被忽略,系数会差三个数量级,summarize的均值输出是判断单位最快的办法。

一个更省事的习惯是在 do 文件里用program define把“读取数据、描述统计、基准回归、稳健回归”打包成可传参的小程序,每道题只换数据集名和变量列表,这样既保证不同题目的处理流程完全一致,也便于回看某一步是哪次修改引入的差异。习题的价值从来不在最终那个系数上,而在这条从数据读取到检验报告的可复现链条上。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询