计量经济学(四)——时间序列相关性的检验与修正
序列相关性(Serial Correlation)是指在时间序列或截面数据的回归模型中,误差项之间存在相关性。这种现象意味着当前误差项的值会受到前期误差项的影响,误差项之间并不是独立的。这与经典线性回归模型假设要求误差项是独立同分布的相矛盾,违背了高斯-马尔可夫定理(Gauss-Markov Theorem)中的条件。在时间序列数据中,序列相关性常见于相邻时点之间的自相关现象。通常,第一阶自相关是最为常见的,即当前期的误差项与上期的误差项之间存在线性关系。在一些长期经济数据或者金融数据中,序列相关性的问题尤为突出。
一、序列相关性的描述
如果所取样本是独立随机抽取的(多元回归模型基本假设MLR.2——样本数据需通过随机抽样获得,观测值相互独立同分布,确保估计量无偏并可进行统计推断),则从理论上保证了模型的随机干扰项相互独立,不存在序列相关。如果模型的随机干扰项违背了相互独立的基本假设,则称为存在序列相关问题。鉴于时间序列数据不可重复观测,因此以时间序列数据为样本,一般会破坏随机抽样的假定。
1.1 序列相关性模型(Serial Correlation Model)
在时间序列回归分析中,序列相关性指的是模型的随机扰动项 \(u_{t}\) 在不同时期之间存在系统性的相关性。这种现象往往源于经济变量的惯性、政策反应延迟、测量误差传递等因素。若不加以处理,会导致参数估计的标准误有偏,进而影响假设检验的显著性判断。
理论模型与设定
考虑经典多元线性回归模型:
其假设之一是误差项独立性,即:
然而在序列数据中,这一假设常被违反,表现为:
常用的序列相关性形式
一阶自回归(AR(1))误差结构
最常见的设定是:
其中 \(\rho\) 为自相关系数,\(\epsilon_{t}\) 为白噪声。若 \(\rho > 0\),则误差具有正自相关;若 \(\rho < 0\),则为负自相关。
方差与协方差:
高阶自回归(AR(p))
当误差相关性延续多个滞后期时,可扩展为:
这种结构在宏观经济模型和金融时间序列分析中较为常见。
一般线性过程(ARMA 型)
若误差同时依赖于自身滞后项与扰动项滞后值,则有:
矩阵表达与GLS修正
对于 AR(1) 误差,误差项的协方差矩阵 \(\Omega\) 为:
当 \(\rho \neq 0\) 时,OLS 的协方差估计 \(\sigma^{2} \left(\right. X^{'} X \left.\right)^{- 1}\) 不再正确,必须使用 广义最小二乘(GLS):
实际应用中 \(\rho\) 往往未知,需先估计 \(\rho\)(如 Cochrane–Orcutt 或 Prais–Winsten 方法),再代入 \(\Omega\) 进行FGLS估计。
1.2 序列相关性的产生原因
序列相关性的产生原因是多方面的,主要包括以下几种常见情况。
模型设定不正确:如果模型没有正确地捕捉数据生成过程,或者遗漏了重要的变量,那么误差项中可能包含一些未解释的规律性,从而导致序列相关性。例如,当时间序列数据中存在趋势但模型没有包含相关的趋势变量时,就可能出现序列相关性。
数据特性:序列数据本身可能具有趋势或季节性,这些特性可能没有被模型所捕捉。例如经济指标通常随时间变化而波动,这种波动如果没有在模型中反映出来,误差项就可能呈现出序列相关性。
惯性效应:在一些领域,特别是宏观经济和金融数据中,当前的经济活动或市场行为往往会受到之前事件的影响,表现出惯性效应。这些惯性效应如果没有被模型捕捉到,就可能导致误差项之间的相关性。
动态关系:当模型中没有正确包含动态的结构关系时,例如滞后效应等,这也可能导致序列相关性。若模型缺少必要的滞后项,则会在误差项中引入序列相关性。
1.3 序列相关性的后果
估计不再是最优的。根据高斯-马尔可夫定理,在经典线性回归模型假设成立的情况下,普通最小二乘法(OLS)估计具有无偏性、有效性和一致性。然而,在序列相关性存在时,虽然OLS估计仍然是无偏的,但不再是最有效的(即不再具有最小方差),这意味着其他估计方法可以提供更优的估计。
标准误差估计失效。序列相关性会导致估计参数的标准误差失真,使得假设检验和置信区间失效。例如,在存在正的序列相关性时,估计的标准误差通常会被低估,导致假设检验中的t统计量过大,进而可能错误地拒绝了原假设,增加了I类错误的概率。
假设检验失效。序列相关性会影响F检验和t检验的有效性,导致这些检验在序列相关性存在时的假设检验结果不再可信,可能会使得研究者对回归结果得出错误的结论。
预测准确性下降。序列相关性影响模型的预测能力。如果模型中存在未捕捉的序列相关性,预测的结果可能会失真,难以反映真实的数据生成过程,进而影响预测的准确性和可靠性。
二、序列相关性的检验方法
在回归分析,尤其是时间序列数据建模中,序列相关性(serial correlation)是一种常见问题,若存在序列相关性,将导致 OLS 估计的标准误失真、t 检验与F检验结果无效。因此,检测并识别残差的序列相关性是回归诊断的重要环节。常用检验方法包括 图示法、杜宾-沃森检验、Ljung-Box 检验 和 布里什-戈弗雷检验。以下逐一说明。
2.1 图示法检验
图示法是通过可视化手段识别残差自相关的直观方法,主要工具为 自相关函数(ACF)图 和 偏自相关函数(PACF)图:
- ACF 图:展示残差在不同滞后期的总体自相关系数。若所有系数在零线附近随机波动且无显著峰值,说明残差无显著自相关;若某些滞后期的相关系数显著偏离零,可能存在自相关性。
- PACF 图:显示在剔除中间滞后效应后,各滞后期与当前期之间的“纯粹”相关性,能帮助识别特定阶数的直接相关。
- 综合判断:若 ACF 图呈现缓慢衰减,而 PACF 图在某一特定滞后期出现显著截尾,则常暗示存在该阶自相关(如一阶 AR(1))。
图示法优点是直观,但不能提供显著性检验结果,通常用于初步诊断,需要与定量检验结合使用。
2.2 杜宾-沃森检验(Durbin–Watson Test)
杜宾-沃森检验是检测一阶残差自相关的经典方法,适用于不含滞后因变量的线性回归模型。其统计量公式为:
判定规则:
- \(DW \approx 2\):无显著自相关
- \(DW < 2\):存在正自相关(越接近 0 越强)
- \(DW > 2\):存在负自相关(越接近 4 越强)
注意事项:
- DW 检验仅能识别一阶自相关,对高阶或复杂相关结构无效。
- 存在滞后因变量的模型不可直接使用 DW,需要改用 BG 检验。
2.3 Ljung-Box 检验
Ljung-Box 检验是对多个滞后期残差自相关性进行联合检验的常用方法,适用于时间序列模型残差诊断。其统计量为:
其中 \(\hat{\rho}_k\) 为滞后 \(k\) 的残差自相关系数,\(h\) 为检验的最大滞后阶数。
在零假设(无序列相关)下,\(Q\) 近似服从 \(\chi^2(h)\) 分布。
该方法可同时检测多阶自相关,适用于模型整体拟合优度的检验(如 ARIMA 模型残差诊断)。
2.4 布里什-戈弗雷检验(Breusch–Godfrey Test)
布里什-戈弗雷(BG)检验是更为灵活的自相关检验方法,基于 拉格朗日乘子(LM)原理,可检测任意阶自相关,并适用于含滞后因变量的模型。核心步骤:
- 用 OLS 拟合原始模型,得到残差 \(\hat{u}_t\);
- 将 \(\hat{u}_t\) 对原模型解释变量及其若干滞后残差回归;
- 计算 \(nR^2\),并与 \(\chi^2\) 分布比较显著性。
BG 检验可视为 DW 检验的推广,能够同时识别一阶和多阶自相关,更适合复杂动态模型。
2.5 方法整合与比较
在自相关诊断中,常用方法各有适用场景与局限。图示法直观但缺乏显著性检验;杜宾-沃森检验主要针对一阶相关,应用最广但较局限;Ljung-Box 检验通过联合检验多阶残差相关性,更适合时间序列整体诊断;布里什-戈弗雷检验则是最通用的工具,可灵活检验高阶相关并适用于动态模型。下表给出对比建议:
| 方法 | 优点 | 局限性 | 适用场景 | 方法选择建议 |
|---|---|---|---|---|
| 图示法(ACF/PACF) | 直观展示残差相关结构,便于探索性分析 | 无法进行显著性检验,结果主观 | 初步判断 | 用于建模前探索,结合统计检验确认 |
| 杜宾-沃森检验 | 专门检测一阶自相关,简单直观 | 不能检测高阶相关,对滞后因变量模型失效 | 基础回归 | 仅在怀疑一阶相关时使用 |
| Ljung-Box 检验 | 可联合检验多阶残差相关性,覆盖面广 | 假设残差为独立同分布,解释需谨慎 | 时间序列 | 适合整体模型诊断,常与ACF/PACF结合 |
| 布里什-戈弗雷检验 | 最通用,可处理高阶相关与动态模型残差 | 计算复杂度较高 | 广泛应用 | 推荐优先使用,特别是高阶和动态模型 |
实务中通常先用图示法快速判断,再用 DW 检验初步确认是否有一阶自相关,若存在高阶或复杂结构,则使用 BG 检验或 Ljung-Box 检验进一步确认。
三、序列相关性的修正措施
序列相关性是指回归模型误差项之间存在时间上的系统性依赖。若不加以修正,会导致普通最小二乘法(OLS)的估计量仍保持无偏,但不再是有效估计量,其标准误与假设检验均会失效,从而影响模型的推断和预测精度。为解决此问题,常用方法包括 广义最小二乘法(GLS)、可行广义最小二乘法(FGLS)、差分法以及增加滞后项等。以下重点介绍 FGLS,并说明其他方法的思路。
3.1 广义最小二乘法(GLS)
广义最小二乘法是经典的序列相关性修正方法,其核心思想是:
通过对模型进行线性变换,使误差项满足独立同分布假设,从而恢复估计的效率。
模型设定:
若 \(\boldsymbol{\Omega}\)(误差协方差矩阵)已知,可构造权重矩阵 \(\boldsymbol{P}=\boldsymbol{\Omega}^{-1/2}\),对模型作如下变换:
此时误差满足经典假设,GLS 估计为:
但实际中,\(\boldsymbol{\Omega}\) 往往未知,因此需采用可行广义最小二乘法。
3.2 可行广义最小二乘法(FGLS)
FGLS 是 GLS 的推广,其步骤是先估计误差协方差矩阵,再进行加权回归,流程如下:
- 初始估计:用 OLS 拟合原模型,得到残差 \(\hat{u}_t\)。
- 估计协方差结构:根据残差估计序列相关性参数(如 AR(1) 模型下的 \(\rho\)):\[\hat{\rho} = \frac{\sum_{t = 2}^{T} \left(\hat{u}\right)_{t} \left(\hat{u}\right)_{t - 1}}{\sum_{t = 2}^{T} \left(\hat{u}\right)_{t - 1}^{2}} \]
- 数据变换:将原数据按 \(\hat{\rho}\) 进行变换,使残差近似白噪声:\[y_{t}^{*} = y_{t} - \hat{\rho} y_{t - 1} , X_{t}^{*} = X_{t} - \hat{\rho} X_{t - 1} \]
- 加权回归:在变换后的数据上用 OLS 估计 \(\hat{\boldsymbol{\beta}}_{\text{FGLS}}\)。
优点:
- 能有效修正序列相关性,适用于复杂的相关结构。
- 大样本下具有较好渐近性质。
局限:
- 依赖协方差结构的正确识别,若模型设定错误可能导致估计偏差。
- 计算较复杂,尤其在高维和长序列数据中。
3.3 差分法与滞后项方法
除 FGLS 外,还有两种常用思路:
-
差分法:对时间序列取一阶或多阶差分,削弱趋势与相关性。例如:
\[\Delta y_{t} = y_{t} - y_{t - 1} \]适用于非平稳序列或存在明显趋势的情况,但会损失长期信息。
-
滞后项方法:在回归模型中显式引入滞后项变量(因变量或解释变量),捕捉动态关系。该方法常用于动态模型(如分布滞后模型、ARDL 模型)中,可缓解序列相关性,但需谨防多重共线性。
3.4 方法选择建议
- 诊断阶段:
可先通过自相关函数(ACF)和偏自相关函数(PACF)图初步判断误差的相关性,再用统计检验加以确认。- Durbin–Watson 检验:主要用于一阶相关。
- Breusch–Godfrey 检验:可检测更一般的高阶相关,更为稳健。
- 一阶相关的处理:
若仅存在 AR(1) 型相关,可采用 Cochrane–Orcutt 或 Prais–Winsten 转换,其中 Prais–Winsten 能保留首期样本,通常较优。 - 复杂相关结构:
若存在高阶或非对称相关,优先使用 FGLS 等方法,通过估计协方差矩阵进行加权回归。但需注意,小样本下 FGLS 的效果可能受限。 - 非平稳与季节性问题:
对于存在趋势或季节性的序列,应首先考虑通过 差分法 使序列平稳,或在模型中引入 季节性滞后项。这样既能缓解序列相关,又能保留动态信息。
四、案例分析
消费模型是研究居民消费行为的重要工具,帮助经济学家和市场分析师理解消费者如何在商品和服务上分配收入。模型通常考虑多种因素,如收入水平、财富、预期收入、税率、价格以及心理和社会因素。通过数学模型,研究者能够预测消费模式随经济条件变化的趋势,这对于政策制定、经济刺激措施的设计以及经济周期的预测至关重要。下表是1985-2003年农村居民人均收入和消费性支出数据,试建立该问题的消费模型。
| 年份 | 全年人均纯收入(现价) | 全年人均消费性支出(现价) | 消费价格指数(1985年为100) | 人均实际纯收入(1985年可比价) |
|---|---|---|---|---|
| 1985 | 397.6 | 317.42 | 100 | 397.6 |
| 1986 | 423.8 | 357 | 106.1 | 399.4 |
| 1987 | 462.6 | 398.3 | 112.7 | 410.4 |
| 1988 | 544.9 | 476.7 | 132.4 | 411.5 |
| 1989 | 601.5 | 535.4 | 157.9 | 380.9 |
| 1990 | 686.3 | 584.63 | 165.1 | 441.6 |
| 1991 | 708.6 | 619.8 | 168.9 | 458.5 |
| 1992 | 784 | 659.8 | 176.8 | 492.3 |
| 1993 | 921.6 | 769.7 | 201 | 541.4 |
| 1994 | 1221 | 1016.81 | 214.3 | 611.6 |
| 1995 | 1577.7 | 1310.36 | 222.3 | 648.5 |
| 1996 | 1923.1 | 1572.1 | 219.1 | 677.5 |
| 1997 | 2090.1 | 1617.15 | 314.3 | 704.5 |
| 1998 | 2162 | 1590.33 | 314.3 | 415.6 |
| 1999 | 2214.3 | 1577.42 | 316.5 | 747.6 |
| 2000 | 2253.4 | 1670 | 315.2 | 785.4 |
| 2001 | 2366.4 | 1741 | 320.2 | 818.8 |
| 2002 | 2475.6 | 1834 | - | - |
| 2003 | 2622.24 | 1943.3 | - | - |
注意:2002年和2003年的消费价格指数和人均实际纯收入数据缺失。
4.1 缺失数据处理
查找中国统计年鉴1985-2005全国各种物价总指数(上年=100)见下表。
| 年份 | 2005 | 2004 | 2003 | 2002 | 2001 | 2000 | 1999 | 1998 | 1997 | 1996 | 1995 | 1994 | 1993 | 1992 | 1991 | 1990 | 1989 | 1988 | 1987 | 1986 | 1985 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 居民消费价格指数 | 101.8 | 103.9 | 101.2 | 99.2 | 100.7 | 100.4 | 98.6 | 99.2 | 102.8 | 108.3 | 117.1 | 124.1 | 114.7 | 106.4 | 103.4 | 103.1 | 118.0 | 118.8 | 107.3 | 106.5 | 109.3 |
补充2002年和2003年消费价格指数(1985年为100),将上面2002或2003的价格指数连乘到1986年,就得2002和2003的价格指数分别为330.78,334.75。
cpi = {
1985: 109.3, 1986: 106.5, 1987: 107.3, 1988: 118.8, 1989: 118.0,
1990: 103.1, 1991: 103.4, 1992: 106.4, 1993: 114.7, 1994: 124.1,
1995: 117.1, 1996: 108.3, 1997: 102.8, 1998: 99.2, 1999: 98.6,
2000: 100.4, 2001: 100.7, 2002: 99.2, 2003: 101.2, 2004: 103.9, 2005: 101.8
}
# 以1985年为基准,计算2002年和2003年的累积居民消费价格指数
base_cpi = 100
cpi_2002 = base_cpi
cpi_2003 = base_cpi
# 连乘从1985年到2002年的CPI
for year in range(1986, 2002+1):
cpi_2002 *= cpi[year] / 100
# 连乘从1985年到2003年的CPI
for year in range(1986, 2003+1):
cpi_2003 *= cpi[year] / 100
# 输出结果
print(f"2002年的居民消费价格指数(以1985年为基准):{cpi_2002:.2f}")
print(f"2003年的居民消费价格指数(以1985年为基准):{cpi_2003:.2f}")
将两个价格指数补入原始数据表,计算人均实际纯收入(1985年可比价)和全年人均消费性支出(1985年可比价),汇总填入下表中。
| 年份 | 全年人均纯收入(现价) | 全年人均消费性支出(现价) | 消费价格指数(1985年为100) | 人均实际纯收入X(1985年可比价) | 人均消费性支出Y(1985年可比价) |
|---|---|---|---|---|---|
| 1985 | 397.6 | 317.42 | 100 | 397.60 | 317.42 |
| 1986 | 423.8 | 357 | 106.1 | 399.43 | 336.48 |
| 1987 | 462.6 | 398.3 | 112.7 | 410.47 | 353.42 |
| 1988 | 544.9 | 476.7 | 132.4 | 411.56 | 360.05 |
| 1989 | 601.5 | 535.4 | 157.9 | 380.94 | 339.08 |
| 1990 | 686.3 | 584.63 | 165.1 | 415.69 | 354.11 |
| 1991 | 708.6 | 619.8 | 168.9 | 419.54 | 366.96 |
| 1992 | 784 | 659.8 | 176.8 | 443.44 | 373.19 |
| 1993 | 921.6 | 769.7 | 201 | 458.51 | 382.94 |
| 1994 | 1221 | 1016.81 | 214.3 | 569.76 | 474.48 |
| 1995 | 1577.7 | 1310.36 | 222.3 | 709.72 | 589.46 |
| 1996 | 1923.1 | 1572.1 | 219.1 | 877.73 | 717.53 |
| 1997 | 2090.1 | 1617.15 | 314.3 | 665.00 | 514.52 |
| 1998 | 2162 | 1590.33 | 314.3 | 687.88 | 505.99 |
| 1999 | 2214.3 | 1577.42 | 316.5 | 699.62 | 498.39 |
| 2000 | 2253.4 | 1670 | 315.2 | 714.91 | 529.82 |
| 2001 | 2366.4 | 1741 | 320.2 | 739.04 | 543.72 |
| 2002 | 2475.6 | 1834 | 330.78 | 748.41 | 554.45 |
| 2003 | 2622.24 | 1943.3 | 334.75 | 783.34 | 580.52 |
4.2 理论模型——一元线性回归
设被解释变量——人均消费支出\(Y\),解释变量——居民纯收入\(X\),二者之间满足线性约束,理论模型为:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
# 支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为SimHei(黑体)
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 数据输入:年份、X(人均实际纯收入)和Y(人均消费性支出)
data = {
'年份': [1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003],
'X': [397.60, 399.43, 410.47, 411.56, 380.94, 415.69, 419.54, 443.44,
458.51, 569.76, 709.72, 877.73, 665.00, 687.88, 699.62, 714.91,
739.04, 748.41, 783.34], # 人均实际纯收入
'Y': [317.42, 336.48, 353.42, 360.05, 339.08, 354.11, 366.96, 373.19,
382.94, 474.48, 589.46, 717.53, 514.52, 505.99, 498.39, 529.82,
543.72, 554.45, 580.52] # 人均消费性支出
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 定义自变量X和因变量Y
X = df['X'] # 自变量(人均实际纯收入)
Y = df['Y'] # 因变量(人均消费性支出)
# 添加常数项
X = sm.add_constant(X)
# 建立线性回归模型
model = sm.OLS(Y, X)
results = model.fit()
# 输出回归结果(类似EViews格式)
print(results.summary())
# 可视化数据点和回归线
plt.figure(figsize=(10, 6))
# 1. 绘制回归线图
plt.subplot(2, 1, 1)
plt.scatter(df['X'], Y, color='blue', label='实际数据')
plt.plot(df['X'], results.fittedvalues, color='red', label='回归线')
plt.xlabel('人均实际纯收入 (X)')
plt.ylabel('人均消费性支出 (Y)')
plt.title('人均消费性支出与人均实际纯收入的一元回归分析')
plt.legend()
# 2. 绘制残差曲线图(按年份)
plt.subplot(2, 1, 2)
residuals = results.resid # 获取残差
plt.plot(df['年份'], residuals, color='green', marker='o', linestyle='-', label='残差曲线')
plt.axhline(y=0, color='red', linestyle='--', label='零线') # 绘制零线
plt.xlabel('年份')
plt.ylabel('残差')
plt.title('残差曲线图(按年份)')
plt.legend()
# 显示图形
plt.tight_layout()
plt.show()
OLS Regression Results
==============================================================================
Dep. Variable: Y R-squared: 0.954
Model: OLS Adj. R-squared: 0.951
Method: Least Squares F-statistic: 350.8
Date: Tue, 15 Oct 2024 Prob (F-statistic): 8.71e-13
Time: 11:40:39 Log-Likelihood: -87.065
No. Observations: 19 AIC: 178.1
Df Residuals: 17 BIC: 180.0
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 76.5210 21.133 3.621 0.002 31.933 121.109
X 0.6621 0.035 18.731 0.000 0.588 0.737
==============================================================================
Omnibus: 3.548 Durbin-Watson: 0.655
Prob(Omnibus): 0.170 Jarque-Bera (JB): 1.813
Skew: 0.718 Prob(JB): 0.404
Kurtosis: 3.477 Cond. No. 2.20e+03
==============================================================================
回归方程为\(Y_i=76.5210+0.6621X_i\),Durbin-Watson检验值为0.655,说明残差之间存在自相关。
4.3 用广义差分法对时间序列修正
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.stats.diagnostic import het_breuschpagan
from statsmodels.stats.stattools import durbin_watson
# 支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为SimHei(黑体)
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 数据输入:年份、X(人均实际纯收入)和Y(人均消费性支出)
data = {
'年份': [1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003],
'X': [397.60, 399.43, 410.47, 411.56, 380.94, 415.69, 419.54, 443.44,
458.51, 569.76, 709.72, 877.73, 665.00, 687.88, 699.62, 714.91,
739.04, 748.41, 783.34], # 人均实际纯收入
'Y': [317.42, 336.48, 353.42, 360.05, 339.08, 354.11, 366.96, 373.19,
382.94, 474.48, 589.46, 717.53, 514.52, 505.99, 498.39, 529.82,
543.72, 554.45, 580.52] # 人均消费性支出
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 对时间序列数据进行差分操作,消除趋势
df['dX'] = df['X'].diff().dropna() # 差分后的X(人均实际纯收入)
df['dY'] = df['Y'].diff().dropna() # 差分后的Y(人均消费性支出)
# 删除NA值后的数据
df_diff = df.dropna()
# 定义自变量dX和因变量dY
dX = df_diff['dX']
dY = df_diff['dY']
# 添加常数项
dX = sm.add_constant(dX)
# 建立一元线性回归模型(差分回归)
model_diff = sm.OLS(dY, dX)
results_diff = model_diff.fit()
# 输出回归结果表
print("广义差分回归结果:")
print(results_diff.summary())
# 可视化调整后的时间序列
plt.figure(figsize=(10, 6))
# 1. 绘制原始差分后的数据与回归线
plt.subplot(2, 1, 1)
plt.scatter(df_diff['dX'], dY, color='blue', label='差分后的实际数据')
plt.plot(df_diff['dX'], results_diff.fittedvalues, color='red', label='差分回归线')
plt.xlabel('差分后的实际纯收入 (dX)')
plt.ylabel('差分后的消费性支出 (dY)')
plt.title('差分后的消费性支出与实际纯收入的回归分析')
plt.legend()
# 2. 绘制残差曲线图
plt.subplot(2, 1, 2)
residuals_diff = results_diff.resid # 获取差分残差
plt.plot(df_diff['年份'], residuals_diff, color='green', marker='o', linestyle='-', label='差分残差曲线')
plt.axhline(y=0, color='red', linestyle='--', label='零线') # 绘制零线
plt.xlabel('年份')
plt.ylabel('差分残差')
plt.title('差分残差曲线图(按年份)')
plt.legend()
# 显示图形
plt.tight_layout()
plt.show()
# 计算杜宾-沃森统计量
dw_diff = durbin_watson(results_diff.resid)
print(f'杜宾-沃森统计量 (差分回归): {dw_diff}')
OLS Regression Results
==============================================================================
Dep. Variable: dY R-squared: 0.963
Model: OLS Adj. R-squared: 0.961
Method: Least Squares F-statistic: 417.8
Date: Tue, 15 Oct 2024 Prob (F-statistic): 6.84e-13
Time: 12:15:24 Log-Likelihood: -71.338
No. Observations: 18 AIC: 146.7
Df Residuals: 16 BIC: 148.5
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const -3.8131 3.309 -1.152 0.266 -10.827 3.201
dX 0.8600 0.042 20.440 0.000 0.771 0.949
==============================================================================
Omnibus: 0.439 Durbin-Watson: 1.431
Prob(Omnibus): 0.803 Jarque-Bera (JB): 0.529
Skew: 0.004 Prob(JB): 0.768
Kurtosis: 2.160 Cond. No. 81.7
==============================================================================
** Durbin-Watson:1.431**
总结
序列相关性在经济和金融数据的建模中是一个常见的问题。序列相关性如果不加以修正,不仅会影响模型参数的估计效率,还会导致假设检验失效以及预测不准确。因此,在建模时需要对数据的特性进行充分的检验,一旦发现序列相关性存在,应及时采用适当的修正措施。广义最小二乘法、可行广义最小二乘法、差分法以及杜宾两步法等都是有效的修正序列相关性的方法,它们在不同的数据特性下提供了灵活的解决方案。

浙公网安备 33010602011771号