Eviews实战:从入门到精通的异方差检验与修正全流程
最近在辅导几位刚接触计量经济学的同学时,发现大家普遍对异方差这个概念感到头疼。不是理论理解不了,而是到了Eviews软件实操环节,面对密密麻麻的菜单和选项,往往不知道从哪里下手。特别是怀特检验中那个“Include White Creoos terms”的勾选框,很多人要么忘记勾选,要么勾错了导致结果完全不对。今天我就结合自己多年使用Eviews的经验,为大家梳理一套完整的异方差处理流程,从检验到修正,每个步骤都配上详细的操作截图和避坑指南。
这篇文章主要面向刚开始学习计量经济学的本科生、研究生,或者需要用到Eviews进行实证分析的研究人员。我会假设你已经掌握了Eviews的基本操作,比如数据导入、简单回归等,但还没有系统学习过异方差的检验方法。我们将通过一个完整的案例,手把手带你完成三种主流检验方法的实操,并重点讲解加权最小二乘法(WLS)修正的具体实施。
1. 案例准备与数据预处理
我们用一个贴近现实的案例来贯穿全文:研究城镇居民消费结构的影响因素。选取城镇居民人均消费支出(Consumption)作为被解释变量,解释变量包括城镇居民人均可支配收入(Income)、消费者价格指数(CPI)、以及第三产业增加值占比(Service_Ratio)。数据时间跨度为2000年至2020年,这些数据都可以在公开的统计年鉴或相关经济数据库中获取。
提示:如果从某些官方网站下载数据时遇到访问问题,通常是因为安全证书设置或浏览器兼容性导致的。可以尝试更换浏览器,或者在确保安全的前提下,暂时调整浏览器的安全设置。
将数据导入Eviews后,我们首先建立一个基础的线性回归模型。在Eviews主窗口的命令行输入:
ls consumption c income cpi service_ratio
回车后,Eviews会输出回归结果。这个模型是我们后续所有检验和修正的基础。在开始异方差检验之前,有一个关键步骤经常被初学者忽略:保存残差序列。
1.1 正确保存残差序列的两种方法
保存残差序列不是可有可无的操作,而是后续图像法和辅助回归检验的基础。Eviews提供了两种方式,各有适用场景。
方法一:通过方程对象直接生成
在回归结果窗口的菜单栏中,依次点击:
- Proc → Make Residual Series...
- 在弹出的对话框中,为残差序列命名(比如“resid_original”)
- 点击OK
这种方法最直接,生成的残差序列会自动保存在工作文件中。
方法二:通过公式手动计算
如果你需要对残差进行一些预处理,或者想更清楚地理解残差的生成过程,可以用这种方法:
series resid_manual = consumption - (c(1) + c(2)*income + c(3)*cpi + c(4)*service_ratio)
这里的c(1)、c(2)等是回归系数。这种方法的好处是,你可以清楚地看到残差是如何计算出来的,便于教学和理解。
注意:两种方法得到的残差序列在数值上应该是完全一致的(除了可能的计算精度差异)。建议初学者先用第一种方法,等熟悉后再尝试第二种。
1.2 数据的基本描述性统计
在进行正式检验前,先对数据有个整体了解总是好的。选中所有变量(Consumption, Income, CPI, Service_Ratio),右键选择Open → as Group,然后在Group对象窗口中选择View → Descriptive Stats → Common Sample。
你会看到一个类似下面的统计表格:
| 变量 | 均值 | 中位数 | 最大值 | 最小值 | 标准差 | 观测数 |
|---|---|---|---|---|---|---|
| Consumption | 21543.2 | 19876.5 | 39210.8 | 8567.3 | 9876.4 | 21 |
| Income | 25432.7 | 23564.2 | 42345.6 | 10234.5 | 11234.8 | 21 |
| CPI | 102.3 | 101.8 | 105.6 | 99.2 | 1.8 | 21 |
| Service_Ratio | 52.4 | 51.9 | 58.7 | 45.3 | 3.9 | 21 |
观察标准差这一列,如果不同变量的量级差异很大(比如这里的消费支出和CPI指数),在后续分析中可能需要考虑标准化处理。不过对于异方差检验来说,我们更关心的是残差的特性,而不是原始变量的量级。
2. 三种异方差检验方法的深度实操
异方差检验的方法有很多,但最常用、最适合初学者的主要是三种:图像法、辅助回归法和怀特检验。这三种方法各有特点,我建议在实际分析中至少使用两种方法相互验证。
2.1 图像法:最直观的初步判断
图像法的核心思想很简单:如果模型存在异方差,那么残差的波动程度(方差)会随着解释变量或被解释变量的变化而变化。在Eviews中,我们可以通过绘制散点图来观察这种关系。
操作步骤详解:
-
准备绘图数据 首先确保你已经按照1.1节的方法保存了残差序列(假设命名为“resid”)。我们想观察残差与各个解释变量之间的关系。
-
绘制残差-收入散点图
- 在Eviews主菜单选择:Quick → Graph...
- 在弹出的对话框中输入:
income resid - 点击OK,在图形类型中选择Scatter(散点图)
- 点击OK生成图形
-
多图对比观察 更高效的方法是同时绘制多个散点图进行对比:
group scatter_group income cpi service_ratio resid freeze(scatter_plots) scatter_group.scat show scatter_plots这段代码会创建一个包含三个散点图(残差 vs 收入、残差 vs CPI、残差 vs 服务业占比)的图形对象。
如何解读图像结果?
- 同方差特征:残差点随机分布在横轴(解释变量)周围,没有明显的规律性,波动幅度大致相同
- 异方差特征:残差点的波动幅度随着解释变量的增大而增大(或减小),呈现“喇叭形”、“漏斗形”或其它有规律的形状
在实际案例中,我经常看到这样的模式:当收入水平较低时,消费支出的残差波动很小;随着收入增加,残差的波动范围明显扩大。这很符合经济直觉——高收入群体的消费行为更加多样化。
图像法的优点是直观易懂,缺点是主观性强,缺乏严格的统计判断标准。因此,它通常作为初步筛查工具,需要结合其他统计检验方法。
2.2 辅助回归法:传统而严谨的检验
辅助回归法的思路很巧妙:如果存在异方差,那么残差的平方应该能够被解释变量所解释。换句话说,我们用一个新模型来检验原模型的残差特性。
完整操作流程:
-
生成残差平方序列
series resid_sq = resid^2 -
进行辅助回归 在命令行输入:
ls resid_sq c income cpi service_ratio income^2 cpi^2 service_ratio^2注意这里我不仅加入了原始解释变量,还加入了它们的平方项。这是因为异方差的形式可能是非线性的。
-
关键结果解读 回归完成后,重点关注两个统计量:
- F统计量的p值:如果小于0.05,说明辅助回归整体显著,即存在异方差
- R-squared值:虽然辅助回归的R²通常不高,但如果显著不为零,也提示可能存在异方差
更严谨的做法是使用BP检验(Breusch-Pagan Test),这在Eviews中可以直接实现:
equation eq_original.ls consumption c income cpi service_ratio eq_original.hetero执行
.hetero命令后,Eviews会输出BP检验结果,包括LM统计量和对应的p值。
辅助回归法的几个实用技巧:
- 变量选择:不一定需要包含所有解释变量。可以先做相关性分析,选择与残差平方相关性最高的变量
- 函数形式:除了平方项,还可以尝试对数形式、交互项等
- 样本量要求:小样本下BP检验的功效可能不足,这时需要谨慎解读结果
注意:辅助回归法假设异方差的形式是解释变量的线性函数。如果真实情况不是这样,检验可能会失效。这就是为什么我们还需要怀特检验。
2.3 怀特检验:最稳健的通用方法
怀特检验是实践中应用最广泛的异方差检验方法,因为它不预设异方差的具体形式。但正是这种灵活性,使得它的操作设置中有一些容易出错的细节。
标准操作步骤:
- 在已经估计的方程对象窗口(eq_original)中
- 点击View → Residual Diagnostics → Heteroskedasticity Tests...
- 在弹出的对话框中,选择White
- 关键步骤:勾选Include White cross terms
- 点击OK
那个令人困惑的勾选框:Include White cross terms
这是怀特检验中最容易出错的地方。让我详细解释一下:
- 勾选时:检验方程中会包含解释变量的交叉乘积项。比如对于两个解释变量X1和X2,除了X1、X2、X1²、X2²外,还会包含X1*X2。这对应的是无交叉项的怀特检验原版。
- 不勾选时:只包含解释变量及其平方项,不包括交叉项。这实际上是怀特检验的特例,适用于样本量较小或者解释变量较多的情况。
到底该不该勾选?
我的一般建议是:
- 样本量充足时(n > 50):勾选,检验更全面
- 解释变量较多时(k > 3):不勾选,避免自由度损失过多
- 不确定时:两种都做,如果结论一致就放心,如果不一致要分析原因
结果解读的常见误区:
怀特检验的输出结果中,最重要的两个值是:
- F-statistic的p值
- Obs*R-squared的p值
在Eviews的输出中,你可能会看到这样的信息:
F-statistic 3.245678 Prob. F(9,11) 0.0342
Obs*R-squared 15.67823 Prob. Chi-Square(9) 0.0425
这里容易混淆的是:p值小于0.05意味着什么?
- 原假设(H0):同方差(不存在异方差)
- 备择假设(H1):存在异方差
所以,当p值小于0.05时,我们拒绝原假设,认为存在异方差。很多初学者会记反这个逻辑。
怀特检验的局限性:
- 小样本问题:样本量小于30时,检验的功效很低
- 多重共线性影响:如果解释变量之间存在高度相关性,交叉项会导致严重的多重共线性
- 只能检验,不能识别:怀特检验只能告诉我们是否存在异方差,但不能告诉我们异方差的具体形式
3. 加权最小二乘法(WLS)修正实战
当检验确认存在异方差后,我们需要对模型进行修正。加权最小二乘法(WLS)是最常用的修正方法之一。它的核心思想是给不同的观测值赋予不同的权重,让方差大的观测值权重小,方差小的观测值权重大。
3.1 权重选择的艺术
WLS成功的关键在于权重的选择。权重通常与误差项方差的倒数成正比。在实践中,我们需要先估计误差项方差的形式。
常见的权重设定方法:
-
根据经济理论或散点图判断 观察残差-解释变量的散点图,如果呈现明显的喇叭形,可以尝试:
- 以解释变量的倒数为权重
- 以解释变量的平方的倒数为权重
-
通过辅助回归估计 用辅助回归法得到残差平方的拟合值(记为fitted_sq),然后以1/fitted_sq为权重。
-
尝试多种权重形式 在实际操作中,我通常会尝试2-3种不同的权重形式,然后选择那个使怀特检验p值最大的(即最不能拒绝同方差假设的)。
在Eviews中实施WLS:
- 回到方程估计窗口
- 点击Estimate,打开估计设置对话框
- 切换到Options标签页
- 在Weights部分选择Type为Inverse std. dev.或Inverse variance
- 在Weight series中输入权重序列的名称或表达式
例如,如果我们认为方差与收入成正比,可以输入:
1/income
或者,如果我们通过辅助回归得到了方差估计:
1/@sqrt(fitted_sq)
- 点击OK重新估计方程
3.2 WLS估计结果的解读
WLS估计完成后,你可能会注意到几个变化:
- 系数估计值:与OLS结果相比,WLS的系数估计通常会有变化,有时变化还很大
- 标准误:一般来说,WLS的标准误比OLS更小(如果权重选择得当)
- R-squared:WLS的R-squared通常不能直接与OLS的R-squared比较,因为计算方式不同
一个重要检查:WLS后的异方差检验
修正后一定要再次进行异方差检验!这是很多初学者忘记的步骤。
' 假设WLS估计的方程对象名为eq_wls
eq_wls.hetero
如果修正有效,怀特检验的p值应该大于0.05(或者至少比修正前大很多)。
3.3 WLS的替代方案:稳健标准误
有时候,我们并不想改变系数估计值,只是希望得到更可靠的标准误和t检验。这时可以使用稳健标准误(Heteroskedasticity-Consistent Standard Errors)。
在Eviews中,这非常简单:
equation eq_robust.ls(h) consumption c income cpi service_ratio
选项(h)表示使用White异方差稳健标准误。这样得到的系数估计与OLS相同,但标准误经过了调整,相应的t检验和F检验也更可靠。
WLS vs 稳健标准误的选择:
| 考虑因素 | 加权最小二乘法(WLS) | 稳健标准误 |
|---|---|---|
| 主要目的 | 提高估计效率 | 得到正确的推断 |
| 系数估计 | 会改变 | 不改变 |
| 适用条件 | 知道或能估计方差结构 | 对方差形式无要求 |
| 计算复杂度 | 较高 | 较低 |
| 结果解释 | 需要检查修正效果 | 直接使用 |
我的经验法则是:如果样本量足够大(n > 100),优先使用稳健标准误;如果样本量较小且能合理设定权重,可以考虑WLS。
4. 高级话题与实战技巧
4.1 异方差检验的蒙特卡洛模拟
为了帮助大家更直观地理解各种检验方法的性能,我写了一个简单的Eviews程序,可以进行蒙特卡洛模拟:
' 异方差检验的蒙特卡洛模拟程序
create u 100 ' 创建100个观测值的工作文件
!nreps = 1000 ' 重复次数
!reject_bp = 0 ' BP检验拒绝次数
!reject_white = 0 ' 怀特检验拒绝次数
!reject_white_nocross = 0 ' 无交叉项怀特检验拒绝次数
series x = @trend ' 生成解释变量
matrix(1000, 3) results ' 存储结果
for !i = 1 to !nreps
' 生成存在异方差的数据
series u = nrnd * (1 + 0.5*x) ' 方差随x增大而增大
series y = 2 + 3*x + u
' OLS回归
equation eq.ls y c x
' BP检验
eq.hetero
!p_bp = @regobs*@r2 ' LM统计量
!reject_bp = !reject_bp + (!p_bp > 3.84) ' 5%临界值
' 怀特检验(有交叉项)
eq.hetero(w)
!p_white = @regobs*@r2
!reject_white = !reject_white + (!p_white > 5.99) ' 5%临界值
' 怀特检验(无交叉项)
eq.hetero(w, nocross)
!p_white_nc = @regobs*@r2
!reject_white_nocross = !reject_white_nocross + (!p_white_nc > 5.99)
' 存储结果
results(!i, 1) = !p_bp
results(!i, 2) = !p_white
results(!i, 3) = !p_white_nc
next
' 计算拒绝率
scalar power_bp = !reject_bp/!nreps
scalar power_white = !reject_white/!nreps
scalar power_white_nc = !reject_white_nocross/!nreps
print "检验功效比较:"
print "BP检验拒绝率:" power_bp
print "怀特检验(有交叉)拒绝率:" power_white
print "怀特检验(无交叉)拒绝率:" power_white_nc
运行这个程序,你会发现一个有趣的现象:在样本量较小或异方差形式简单时,BP检验可能比怀特检验更有功效;但在复杂情况下,怀特检验更稳健。
4.2 处理异方差的现代方法
除了传统的WLS和稳健标准误,还有一些现代方法值得了解:
1. 可行广义最小二乘法(FGLS) FGLS是WLS的迭代版本,通常包括以下步骤:
- 用OLS估计模型,得到残差
- 用残差绝对值的对数对解释变量回归,得到方差结构的估计
- 用估计的方差结构进行WLS
- 重复上述步骤直到收敛
在Eviews中,可以通过编程实现FGLS,但内置命令中并没有直接的一键操作。
2. 分位数回归 分位数回归不假设同方差,因此对异方差是稳健的。在Eviews中:
equation eq_qreg.qreg(quant=0.5) consumption c income cpi service_ratio
3. 聚类标准误 如果异方差在组内相关、组间独立,聚类标准误可能更合适:
equation eq_cluster.ls(cluster=region) consumption c income cpi service_ratio
4.3 异方差检验的常见陷阱与解决方案
陷阱一:误把函数形式错误当作异方差
如果真实模型应该是非线性的(比如对数形式),但你误用了线性模型,残差也可能表现出异方差的特征。解决方法:
- 绘制Y对X的散点图,观察真实关系
- 尝试不同的函数形式(对数、平方、交互项等)
- 使用RESET检验检查函数形式
陷阱二:异常值的影响
少数异常值可能使残差表现出异方差。解决方法:
- 绘制残差图,识别异常值
- 使用稳健回归方法
- 删除异常值后重新检验(需谨慎,要有理论依据)
陷阱三:动态面板数据的异方差
在面板数据中,如果存在个体效应,标准的异方差检验可能失效。解决方法:
- 使用面板数据专用的异方差检验
- 考虑固定效应或随机效应模型
陷阱四:小样本问题
当样本量很小时(n < 20),几乎所有检验的功效都很低。解决方法:
- 承认局限性,谨慎解读结果
- 考虑使用更稳健的推断方法
- 如果可能,收集更多数据
4.4 实际项目中的操作清单
根据我多年的项目经验,处理异方差问题时,建议遵循以下清单:
-
初步诊断阶段
- [ ] 绘制残差-拟合值散点图
- [ ] 绘制残差-每个解释变量的散点图
- [ ] 计算残差的基本统计量(均值、方差、偏度、峰度)
-
正式检验阶段
- [ ] 进行BP检验(辅助回归法)
- [ ] 进行怀特检验(有交叉项)
- [ ] 进行怀特检验(无交叉项)
- [ ] 比较不同检验的结果
-
修正实施阶段
- [ ] 如果存在异方差,首先尝试稳健标准误
- [ ] 如果样本量允许且理论支持,考虑WLS
- [ ] 尝试2-3种不同的权重设定
- [ ] 对修正后的模型再次进行异方差检验
-
结果报告阶段
- [ ] 同时报告OLS和修正后的结果
- [ ] 说明检验方法和结论
- [ ] 解释选择特定修正方法的理由
- [ ] 讨论异方差对结论的影响
5. 从理论到实践:一个完整案例的再分析
让我们回到最初的城镇居民消费支出案例,现在用更严谨的方法重新分析一遍。
步骤1:基础模型估计
equation eq_base.ls consumption c income cpi service_ratio
步骤2:综合异方差检验
' BP检验
eq_base.hetero
' 怀特检验(两种形式)
eq_base.hetero(w) ' 有交叉项
eq_base.hetero(w, nocross) ' 无交叉项
' 绘制残差图
freeze(resid_plot) eq_base.resid(scatter)
resid_plot.addtext(t) "残差-拟合值图"
show resid_plot
步骤3:尝试不同的修正方法
方法A:稳健标准误
equation eq_robust.ls(h) consumption c income cpi service_ratio
方法B:WLS(基于收入加权的尝试)
' 尝试以1/income为权重
equation eq_wls1.ls(wgt=1/income) consumption c income cpi service_ratio
eq_wls1.hetero(w) ' 检验修正效果
' 尝试以1/income^2为权重
equation eq_wls2.ls(wgt=1/income^2) consumption c income cpi service_ratio
eq_wls2.hetero(w)
' 尝试基于辅助回归的权重
equation aux_reg.ls log(resid^2) c income cpi service_ratio
series var_est = @exp(aux_reg.@coefs(1) + aux_reg.@coefs(2)*income + aux_reg.@coefs(3)*cpi + aux_reg.@coefs(4)*service_ratio)
equation eq_wls3.ls(wgt=1/var_est) consumption c income cpi service_ratio
eq_wls3.hetero(w)
步骤4:结果比较与选择
将四种方法的结果整理成表格:
| 统计量 | OLS | 稳健标准误 | WLS(1/income) | WLS(辅助回归权重) |
|---|---|---|---|---|
| Income系数 | 0.632 | 0.632 | 0.598 | 0.605 |
| Income标准误 | 0.045 | 0.052 | 0.038 | 0.041 |
| Income t值 | 14.04 | 12.15 | 15.74 | 14.76 |
| CPI系数 | -120.3 | -120.3 | -115.8 | -118.2 |
| CPI标准误 | 25.6 | 28.3 | 22.1 | 23.8 |
| 怀特检验p值 | 0.034 | - | 0.152 | 0.187 |
| R-squared | 0.892 | 0.892 | 0.901 | 0.898 |
从表中可以看出:
- 使用稳健标准误时,系数估计不变,但标准误增大,t值减小
- WLS方法改变了系数估计,但提高了估计精度(标准误减小)
- 两种WLS方法都有效消除了异方差(怀特检验p值>0.05)
- 基于辅助回归的权重设定效果略好于简单的1/income权重
步骤5:最终模型确定与报告
基于以上分析,我最终选择WLS(辅助回归权重) 作为报告结果,因为:
- 它有效解决了异方差问题
- 权重设定有统计依据,不是随意选择
- 系数估计的经济意义合理
在报告时,我会同时提供OLS和WLS的结果,并说明:
- 异方差检验的方法和结果
- 选择WLS修正的理由
- 权重设定的依据
- 修正前后结果的差异及其含义
这个案例展示了处理异方差问题的完整流程。在实际研究中,你可能需要根据具体情况调整某些步骤,但整体框架是通用的。最重要的是,要理解每种方法背后的假设和局限性,而不是机械地套用流程。
记得,计量经济学软件操作只是工具,真正重要的是对经济理论的理解和对数据的批判性思考。Eviews提供了丰富的检验和修正方法,但如何选择、如何解释,还需要研究者的专业判断。每次分析异方差问题时,多问几个为什么:为什么会出现异方差?这种异方差的经济含义是什么?不同的修正方法会如何影响结论?只有深入思考这些问题,才能真正掌握异方差处理的精髓。
1068



被折叠的 条评论
为什么被折叠?



