gls 是 广义最小二乘法 的缩写,是 Stata 中进行多元线性回归的一个强大工具,它的核心功能是处理模型中存在的异方差性 和/或自相关性 问题。

什么是 GLS?为什么需要它?
我们回顾一下标准的线性回归模型(OLS, 普通最小二乘法):
Y = Xβ + ε
OLS 的一个核心假设是误差项的同方差性,即 Var(ε|X) = σ²I,这意味着:
- 同方差: 对于所有观测值,误差项的方差都是常数 。
- 无自相关: 不同观测值之间的误差项是相互独立的(协方差为0)。
在现实世界的许多数据中,这个假设可能不成立,导致异方差性 或自相关性。

- 异方差性: 误差项的方差不是一个常数,在研究收入与消费时,高收入人群的消费波动性通常大于低收入人群。
- 自相关性: 误差项在不同时间点或空间单元上相关,这在时间序列数据(如 GDP、股价)和面板数据(如各省份数据)中尤为常见。
OLS 模型存在异方差或自相关,会带来什么后果?
- 系数估计量仍然是无偏的。
- 它不再是“最优”的(不再是 BLUE - Best Linear Unbiased Estimator)。
- 最严重的问题:系数的标准误是有偏的,导致 t 统计量、F 统计量和 p 值不可靠,你可能会得出某个变量显著(p<0.05),但实际上它并不显著。
GLS 的作用:当误差项的方差-协方差矩阵 已知或可以估计时,GLS 通过对数据进行变换,将一个存在异方差/自相关的模型转换为一个满足 OLS 假设的新模型,从而得到有效(Efficient)且无偏的估计量。
gls 命令的基本语法
gls 命令位于 Stata 的 xt 套件中,因此需要先安装(如果尚未安装):
ssc install xtgee, replace
基本语法结构如下:

gls depvar [indepvars] [if] [in] [, options]
最关键的部分是 options,它告诉 Stata 如何处理误差项的结构。
gls 命令的核心选项:指定方差-协方差结构
gls 的强大之处在于其 vce() 选项,它允许你灵活地指定误差项的方差-协方差矩阵 的结构,以下是几种最常用的结构:
1 处理异方差性
当数据存在异方差但无自相关时(常见于横截面数据),可以使用 vce(independent) 选项。
语法:
gls y x1 x2, vce(independent)
作用:
independent告诉 Stata 假设不同观测值的误差项是相互独立的(无自相关),但它们的方差可以不同。- Stata 会使用一种方法(通常是可行的广义最小二乘法, FGLS)来估计每个观测值的独特方差,然后进行加权最小二乘回归。
- 这会得到对异方差稳健的标准误,类似于
reg y x1 x2, vce(robust)的效果,但gls的框架更为通用。
2 处理自相关性(时间序列数据)
当数据是时间序列且存在自相关时,可以使用 vce(ar#) 或 vce(ma#) 选项。
语法 (自回归模型 AR):
gls y x1 x2, vce(ar1) // 假设一阶自相关 gls y x1 x2, vce(ar(1 2)) // 假设一阶和二阶自相关
作用:
vce(ar1)假设误差项遵循一阶自回归过程,即εₜ = ρεₜ₋₁ + uₜ,uₜ是白噪声。- Stata 会先估计自相关系数 ,然后对原始数据进行准差分变换:
yₜ - ρyₜ₋₁,x₁ₜ - ρx₁ₜ₋₁...,最后对变换后的数据使用 OLS,这就是Cochrane-Orcutt 或 Prais-Winsten 方法。
语法 (移动平均模型 MA):
gls y x1 x2, vce(ma1) // 假设一阶移动平均
作用:
vce(ma1)假设误差项遵循一阶移动平均过程,即εₜ = uₜ + θuₜ₋₁。- GLS 会找到合适的变换来消除这种 MA 结构。
3 处理同时存在异方差和自相关
这是最复杂也最常见的情况,尤其是在面板数据或时间序列中。
语法 (组合结构):
gls y x1 x2, vce(ar1) independent // AR(1) 误差 + 异方差
或者更简洁的写法:
gls y x1 x2, vce(ar1) // 通常默认允许异方差
作用:
vce(ar1)不仅处理了 AR(1) 自相关,其估计过程本身也允许方差在不同观测值之间变化,即同时处理了异方差和自相关。
gls vs. 其他相关命令
Stata 中处理异方差和自相关的命令不止一个,理解它们的区别很重要。
| 命令 | 主要用途 | 核心特点 | 适用数据类型 |
|---|---|---|---|
regress, vce(robust) |
处理异方差 | “三明治”估计量,它不改变系数估计值,只修正标准误,计算简单,但模型设定可能仍然有偏。 | 横截面数据 |
newey |
处理自相关和异方差 | 专门为时间序列设计,使用 Newey-West 标准误,可以处理直到指定阶数的自相关和异方差。 | 时间序列数据 |
prais |
处理 AR(1) 自相关 | 使用 Prais-Winsten 方法,是 gls, vce(ar1) 的一个特例,专注于处理 AR(1) 误差结构。 |
时间序列数据 |
gls |
广义框架 | 最灵活,可以指定复杂的方差-协方差结构(如 AR, MA, 异方差等),并同时对系数和标准误进行重新估计,通常更有效率。 | 时间序列、面板数据、横截面数据 |
简单来说:
- 如果你只想快速得到对异方差稳健的 p 值,用
reg, vce(robust)。 - 如果你有时间序列数据,担心自相关和异方差,用
newey或gls。 - 如果你确信误差是 AR(1) 结构,用
prais或gls, vce(ar1)。 - 如果你需要处理非常复杂的误差结构(如面板数据中的组内相关和异方差),
gls是更好的选择。
完整示例
我们使用 Stata 自带的 airline.dta 数据集,该数据集是经典的乘客数量月度数据,存在明显的趋势和季节性,误差很可能存在自相关。
// 1. 加载数据
sysuse airline, clear
// 2. 绘图观察数据
line air, ytitle("Monthly Airline Passengers (1000s)") xtitle("Time")
// 3. 建立简单的 OLS 模型(作为对比)
regress air t
// 查看结果,记下系数和标准误
// 4. 使用 GLS 处理可能的自相关
// 我们假设误差项存在一阶自相关
gls air t, vce(ar1)
// 对比结果:
// 你会发现 "t" 的系数估计值可能会与 OLS 结果略有不同。
// 更重要的是,标准误会发生变化,t 统计量和 p 值也会相应改变。
// GLS 模型的 AIC/BIC 通常会更低,表明模型拟合得更好。
// 5. 使用 GLS 同时处理自相关和异方差
gls air t, vce(ar1) independent
// 对比 "gls air t, vce(ar1)" 和 "gls air t, vce(ar1) independent" 的输出
// 你会发现标准误等结果可能会有细微差别,后者明确允许异方差结构。
// 6. 使用 newey 命令进行对比(时间序列常用)
newey air t, lag(4) // lag(4) 表示处理到4阶自相关
// 比较 newey 和 gls 的结果,它们通常会非常接近,因为两者都是处理时间序列相关性的有效方法。
重要注意事项
- 模型设定是前提:GLS 只能修正由于误差项违反假设而导致的问题,如果你的模型遗漏了重要的变量、函数形式设定错误(如应该是对数形式而非线性),GLS 也无法得到正确的结果。“垃圾进,垃圾出” (Garbage in, garbage out) 的原则依然适用。
vce()选项的选择:选择正确的vce()结构至关重要,这通常基于经济理论、对数据的了解或残差诊断(如使用predict residuals, residuals然后对残差进行自相关或异方差检验)。glsvs.xtgee:对于面板数据,xtgee(Generalized Estimating Equations) 是gls的一个扩展,专门用于处理面板数据的聚类相关结构(如exchangeable,ar,stationary等),如果你的数据是面板数据,xtgee通常是更自然、更方便的选择。- 输出解读:
gls的输出与regress类似,但请务必关注底部的 "Wald chi2(1)" 和 "Prob > chi2" 统计量,它们用来检验整个模型的联合显著性。
gls 是 Stata 中一个功能强大且灵活的命令,用于在误差项存在异方差性、自相关性或两者兼有的情况下进行有效的回归分析,它的核心在于通过 vce() 选项精确地指定误差项的方差-协方差结构,虽然 regress, vce(robust) 和 newey 等命令在某些场景下更简单直接,但 gls 提供了一个更通用的框架,是高级计量经济学分析中的重要工具。
