gls 是 Generalized Least Squares(广义最小二乘法)的缩写,它是 Stata 中用于拟合具有特定误差结构的线性模型的核心命令,与普通的 regress 命令(普通最小二乘法, OLS)相比,gls 的主要优势在于处理异方差性 和自相关性 问题。

gls 命令的核心作用
当线性回归模型的经典假设(特别是同方差和误差项不相关)被违反时,OLS 估计量虽然仍然是无偏的,但它不再是“最优”的(即不再是方差最小的),t 检验和 F 检验的结果也不再可靠。
gls 通过对模型进行变换,使得变换后的模型满足 OLS 的经典假设,从而得到更有效(更精确)的参数估计。
gls 命令的一般语法结构如下:
gls depvar [indepvars] [if] [in] [weight], options
关键部分是 options,它定义了误差结构的模型。

主要 options:定义误差结构
gls 的强大之处在于其灵活的 options,可以指定多种复杂的方差-协方差结构。
a. 处理异方差性
异方差性指误差项的方差不是一个常数,而是随着自变量的变化而变化。
选项: vce(robust) 或 vce(cluster clustvar)
-
vce(robust):也称为异方差稳健标准误,这是最常用和最简单的方法,它不对误差项的方差结构做任何特定假设,只是计算一个“稳健”的方差-协方差矩阵,使得 t 检验和 F 检验在存在异方差时仍然有效。
(图片来源网络,侵删)// 使用稳健标准误处理异方差,结果与 regress, vce(robust) 相同 gls y x1 x2, vce(robust)
-
vce(cluster clustvar):聚类稳健标准误,当数据存在组内相关时使用(学生数据 nested 在学校里,或者同一个家庭有多个人),它允许组内的观测值之间存在相关性,但假设不同组之间是独立的。// 假设数据按 "school_id" 分组,计算聚类稳健标准误 gls y x1 x2, vce(cluster school_id)
b. 处理自相关性
自相关性指误差项在不同观测值之间存在相关性,这在时间序列数据中非常常见。
选项: panel variable 和 time variable
gls 可以处理面板数据中的自相关,你需要先声明数据为面板数据格式。
// 假设我们有面板数据,id 是个体标识,year 是时间 xtset id year // 使用 Prais-Winsten 或 Cochrane-Orcutt 方法处理一阶自相关 // 这两种方法在 Stata 的 xtgls 命令中更常用,但 gls 也能实现 // Prais-Winsten 方法保留了第一个观测值 xtgls y x1 x2, panels(correlated) corr(ar1) // 这与下面使用 gls 的语法类似,但 xtgls 是面板数据建模的首选 // gls y x1 x2, panels(correlated) corr(ar1) // 这种写法在较新版本中可能已被整合到 xtgls
注意: 对于时间序列和面板数据的自相关处理,Stata 专门的 xtgls 命令通常更方便、更标准。gls 在这方面更多是作为基础工具。
c. 更复杂的方差结构
gls 允许你指定非常灵活的方差函数,例如方差是某个自变量的幂函数。
选项: varfunc(power varname)
// 假设误差方差与 x1 的平方成正比 gls y x1 x2, varfunc(power x1)
这会估计一个模型,Var(u_i) = σ² * (x1_i)^p,并估计出幂 p。
gls vs. regress:一个核心区别
这是初学者最容易混淆的地方。
| 特性 | regress (OLS) |
gls (广义最小二乘法) |
|---|---|---|
| 核心思想 | 最小化残差平方和 Σe_i² |
最小化加权残差平方和 Σ(e_i² / σ_i²) |
| 权重 | 所有观测值权重相同 | 观测值的权重是其误差方差的倒数 (1/σ_i²) |
| 标准误 | 假设同方差,计算常规标准误 | 可以计算稳健标准误、聚类标准误等 |
| 系数估计 | 如果模型设定正确,即使有异方差,系数也是无偏的 | 在异方差或自相关下,系数估计通常更有效(方差更小) |
| 主要用途 | 标准的线性回归 | 处理异方差、自相关,或具有特定方差结构的模型 |
关键点: 当你使用 gls, vce(robust) 时,你得到的系数估计值 和使用 regress 得到的是完全一样的!gls 在这里的真正价值在于它提供了更可靠的标准误、t 统计量和 p 值。
实践示例
我们使用 Stata 自带的 auto 数据集进行演示。
示例 1:处理异方差
我们想用 price (价格) 对 mpg (每加仑英里数) 和 weight (重量) 进行回归。
步骤 1:使用 OLS 回归
sysuse auto, clear reg price mpg weight
查看结果,特别是 mpg 的系数和其 p 值。
步骤 2:使用 gls 计算稳健标准误
// 使用 gls 计算稳健标准误 gls price mpg weight, vce(robust)
对比结果:
你会发现 gls 输出的 price mpg weight 的系数值与 regress 的完全一样,标准误、t 统计量和 p 值可能会不同,如果数据中存在异方差,稳健标准误会更准确。
你也可以用 regress 的等价命令来验证:
// 与上面 gls 命令结果完全相同 reg price mpg weight, vce(robust)
示例 2:处理聚类标准误
假设我们的数据是按 foreign (国内/进口) 分组的,我们担心同一组内的汽车价格误差项相关。
// 使用 gls 计算聚类在 foreign 上的稳健标准误 gls price mpg weight, vce(cluster foreign) // 与 regress 的等价命令对比 reg price mpg weight, vce(cluster foreign)
同样,系数估计值不变,但标准误会根据聚类相关性进行调整。
重要注意事项和最佳实践
- 首选
regress+vce()选项: 对于大多数应用场景(如计算稳健标准误或聚类标准误),直接在regress命令后加上vce()选项是更常见、更易读的做法。reg y x, vce(cluster id)比gls y x, vce(cluster id)更为 Stata 用户所熟知。 - 何时使用
gls?- 当你需要拟合复杂的方差结构时(如
varfunc(power ...))。 - 当你明确想从广义最小二乘法的理论框架出发进行建模时。
- 在面板数据中,
xtgls(基于gls的封装) 是处理随机效应和特定相关结构的强大工具。
- 当你需要拟合复杂的方差结构时(如
- 模型诊断: 在使用
gls之前,最好先进行异方差性检验,例如使用estat hettest(在regress之后) 或whitetest(需要安装whitetest命令),这可以帮助你判断是否真的需要稳健标准误。 xtgls是gls的延伸: 对于面板数据,请优先学习使用xtset和xtgls。xtgls是gls的一个专门封装,语法更简洁,功能更贴合面板数据分析。
| 命令 | 主要用途 | Stata 中的实践 |
|---|---|---|
regress |
标准 OLS 回归 | reg y x, vce(robust) 或 vce(cluster id) 来处理异方差/聚类 |
gls |
广义最小二乘法,处理复杂误差结构 | gls y x, vce(robust) (功能与上相同), varfunc(...), 或作为 xtgls 的基础 |
gls 是一个功能强大的底层工具,而 regress 配合 vce() 选项是解决大多数异方差和聚类问题的更直接、更常用的方法,了解 gls 的原理有助于你更深入地理解线性模型,但在日常分析中,灵活运用 regress 的各种 vce 选项往往更为高效。
