在很多时间序列分析教材里,AR(p)平稳性证明都是那种“看懂了觉得很简单,合上书又完全想不起来”的内容。我当年学的时候也是这样,背下了“特征方程根都在单位圆外”这句话,但根本说不清为什么这个条件能保证平稳。后来自己动手做模拟、推公式、看各种证明思路,才算把这块彻底理顺。
这篇文章我想把AR(p)平稳性证明这件事拆开讲透。会用几条不同的证明思路从不同角度切入,再从实操角度教你用代码验证、判断边界情形,最后把我在实际学习和建模中被坑过的地方一并整理出来。不管是正在上时间序列分析课程,还是准备考研复试,或者是做实证建模想弄清楚背后的原理,这篇都值得认真读一遍。
1. 先从AR(1)说起:平稳性条件的直觉到底在哪
1.1 反复回代:从递推公式看收敛条件
一切高阶模型的直觉都可以从AR(1)开始建立。一阶自回归模型写出来是:
$$y_t = \phi y_{t-1} + \varepsilon_t$$
通常假设 $\varepsilon_t$ 是白噪声,均值为0,方差为 $\sigma^2$,不同时刻互不相关。现在把 $y_{t-1}$ 替换成 $\phi y_{t-2} + \varepsilon_{t-1}$,然后再替换 $y_{t-2}$,反复回代下去,就能得到:
$$y_t = \varepsilon_t + \phi \varepsilon_{t-1} + \phi^2 \varepsilon_{t-2} + \cdots + \phi^{t-1} \varepsilon_1 + \phi^t y_0$$
这个式子非常关键。它告诉我们:当前观测值可以表达成历史白噪声的加权线性组合,外加一个初始值的影响。
如果 $|\phi| < 1$,那么 $\phi^j$ 随着 $j$ 增大呈几何级数衰减,历史远端的噪音对当前的影响越来越小,初始项 $\phi^t y_0$ 也会随着 $t$ 增大趋近于0。相当于系统具有“遗忘能力”,早期的冲击会被时间冲淡。此时 $\sum_{j=0}^{\infty} \phi^j \varepsilon_{t-j}$ 这个无穷级数收敛,方差算出来是 $\sigma^2 / (1-\phi^2)$,是有限常数。
反过来如果 $|\phi| \ge 1$,事情就麻烦了。$|\phi| = 1$ 时,每个历史冲击的权重都是1,累积方差变成 $t\sigma^2$,随样本量增大不断膨胀,均值也回不到常数的轨道上。$|\phi| > 1$ 时更糟,远古的冲击反而对当前影响最大,系统完全发散。
所以AR(1)的平稳条件就是 $|\phi| < 1$。这个结论本身很简单,但它背后传递的直觉很重要:平稳性本质上要求系统对历史冲击的响应是“衰减”的,过去的影响终将消退。
1.2 特征根的两种写法:为什么一会儿圆内一会儿圆外
在AR(1)这个简单例子上,就可以提前看到很多初学者被绕晕的地方了。差分方程 $y_t = \phi y_{t-1}$ 的特征方程写作 $r - \phi = 0$,特征根是 $r = \phi$。平稳条件 $|\phi| < 1$ 等价于这个特征根的模小于1,落在复平面单位圆内部。
但如果我们换一种写法,把模型写成滞后算子形式:
$$(1 - \phi L) y_t = \varepsilon_t$$
看的是多项式 $1 - \phi z = 0$ 的根,那这个根就是 $z = 1/\phi = 1/r$。此时平稳条件变成 $|z| > 1$,根要落在单位圆外部。
同一个条件,因为使用了不同的变量符号,就出现了“单位圆内”和“单位圆外”两种说法。这不算写反了,只是视角不同。后面推广到AR(p)时,这两套说法会持续并存,必须自己心中有数,否则很容易被教材里不同的表述绕进去。
2. AR(p)的平稳性条件:从特征方程到完整证明
2.1 模型标准化与滞后算子形式
现在正式进入p阶情形。AR(p)模型是:
$$y_t = \phi_1 y_{t-1} + \phi_2 y_{t-2} + \cdots + \phi_p y_{t-p} + \varepsilon_t$$
把各项移到等式左边,用滞后算子 $L$ 来表示 $L^k y_t = y_{t-k}$,就可以写成:
$$\Phi(L) y_t = \varepsilon_t$$
其中:
$$\Phi(L) = 1 - \phi_1 L - \phi_2 L^2 - \cdots - \phi_p L^p$$
这里 $\Phi(z) = 1 - \phi_1 z - \cdots - \phi_p z^p$ 是一个关于复数变量 $z$ 的多项式,它被称为自回归特征多项式。平稳性条件就是:所有满足 $\Phi(z)=0$ 的根 $z$ 都满足 $|z| > 1$。
这个条件和AR(1)是完美对应的。AR(1)中 $\Phi(z) = 1 - \phi z$ 的根是 $z=1/\phi$,要求 $|z|>1$,其实就是要求 $|\phi|<1$。
但为什么多项式根的位置能决定整个过程的平稳性?这里面牵涉到两个层面的问题:必要性是“如果不满足根的条件,过程肯定不平稳”,充分性是“如果满足了这个条件,一定能构造出平稳解”。下面分别来讲。
2.2 必要性:根在单位圆内或圆上为什么不行
考虑齐次差分方程:
$$y_t - \phi_1 y_{t-1} - \cdots - \phi_p y_{t-p} = 0$$
它的通解依赖于特征方程:
$$r^p - \phi_1 r^{p-1} - \cdots - \phi_p = 0$$
的根 $r_1, r_2, \ldots, r_p$。每个根对应一个解分量 $r_i^t$。如果某个 $|r_i| > 1$,那么对应分量会随时间发散;如果 $|r_i| = 1$,对应分量既不衰减也不发散,比如随机游走那样,历史冲击的影响永不消退。
这里有个容易混淆的点:这个差分方程特征根 $r$ 与我们前面滞后多项式的根 $z$ 正好是倒数关系。解一下会发现,$\Phi(z)=0$ 对应的 $z=1/r$。所以 $|r_i|>1$(发散情形)正好对应 $|z_i|<1$(根落在单位圆内)。$|r_i|=1$ 对应 $|z_i|=1$,即单位根情形。
一个平稳序列,均值应该是常数,方差应该是有限常数。如果系统中存在一个模长大于等于1的特征根,齐次解中的发散分量或非衰减分量就会把均值和方差推向无穷大,至少不会保持常数。严格说,如果存在模长不超过1的根,就无法找到一个满足模型方程的弱平稳解。这就从必要性上说明了根必须都在单位圆外。
再换一个角度理解这件事:假设将一个脉冲冲击施加在 $\varepsilon_t$ 上,模型对这个冲击的响应如果随时间衰减,系统才能趋于稳定。这个响应正好由特征根决定——$r^j$中的 $|r|<1$ 才能随 $j$ 衰减。这和前面AR(1)的直觉完全一致。
2.3 充分性:根都在单位圆外时如何构造平稳解
反过来需要证明:如果所有根都满足 $|z|>1$,那一定存在一个平稳解。这个证明的核心手段是构造无穷阶MA表示。
基本思路是:形式地把 $\Phi(L)$ “除”到等式右边:
$$y_t = \Phi^{-1}(L) \varepsilon_t = \Psi(L) \varepsilon_t$$
其中:
$$\Psi(L) = \frac{1}{1 - \phi_1 L - \cdots - \phi_p L^p} = \psi_0 + \psi_1 L + \psi_2 L^2 + \cdots$$
展开之后其实就是:
$$y_t = \sum_{j=0}^{\infty} \psi_j \varepsilon_{t-j}$$
这里 $\psi_j$ 被称作格林函数或者脉冲响应函数,它度量的是 $t-j$ 时刻的白噪声冲击对 $y_t$ 的影响强度。
接下来的关键一步是:如果 $\Phi(z)$ 的根全部在单位圆外,那么 $\Psi(z)=1/\Phi(z)$ 在包含单位圆的一个环形区域内是全纯的,可以展开成收敛的幂级数,而且系数 $\psi_j$ 会按指数速度衰减。更具体地说,存在常数 $C>0$ 和某个 $\rho \in (0,1)$,使得对所有 $j$ 都有 $|\psi_j| \le C \rho^j$。
为什么会有这个指数衰减?因为 $\Psi(z)$ 的奇点正好是 $\Phi(z)$ 的零点,也就是那些在单位圆外的 $z_i$。离开单位圆最近的那个零点决定了展开系数的渐进衰减速率。所有零点都在单位圆外,意味着单位圆内没有任何奇点,所以级数在单位圆上收敛,$\psi_j$ 是指数衰减的。
有了这个衰减性之后,验证平稳性就顺利了。首先是均值平稳:
$$E(y_t) = \sum_{j=0}^{\infty} \psi_j E(\varepsilon_{t-j}) = 0$$
因为白噪声均值是0,所以均值恒为0,与 $t$ 无关。然后是二阶矩,利用白噪声在不同时刻不相关这一点:
$$E(y_t^2) = \sum_{j=0}^{\infty} \psi_j^2 \sigma^2 \le \sigma^2 \sum_{j=0}^{\infty} C^2 \rho^{2j} < \infty$$
方差有限且为常数。再算自协方差,对任意滞后 $h$:
$$\gamma_h = Cov(y_t, y_{t+h}) = \sigma^2 \sum_{j=0}^{\infty} \psi_j \psi_{j+h}$$
只取决于 $h$,与 $t$ 无关。所以过程是弱平稳的。充分性得证。
这一步是整个AR(p)平稳性证明的精华所在。你发现没有,证明的核心不是在算具体系数,而是建立“根的位置”和“级数收敛性”之间的桥梁。根在单位圆外保证了展开系数可求和,可求和又保证了二阶矩有限。链条非常清晰。
3. 换个姿势:把AR(p)写成向量AR(1)再证平稳性
3.1 Companion矩阵与状态空间表示
除了直接用滞后多项式做无穷级数展开,还有一个非常实用的技巧:把p阶AR模型改写成一阶向量形式。这个方法在理论分析和数值计算中都很常用,比如判断平稳性、计算预测、推导状态空间模型时都会碰到。
定义状态向量:
$$X_t = (y_t, y_{t-1}, \ldots, y_{t-p+1})^T$$
那么AR(p)模型可以写成:
$$X_t = F X_{t-1} + \varepsilon_t e_1$$
其中 $e_1 = (1, 0, \ldots, 0)^T$,而 $F$ 是一个 $p \times p$ 的矩阵,叫Companion矩阵(同伴矩阵):
$$ F = \begin{bmatrix} \phi_1 & \phi_2 & \cdots & \phi_{p-1} & \phi_p \ 1 & 0 & \cdots & 0 & 0 \ 0 & 1 & \cdots & 0 & 0 \ \vdots & \vdots & \ddots & \vdots & \vdots \ 0 & 0 & \cdots & 1 & 0 \end{bmatrix} $$
这个矩阵的第一行放的是AR系数,下面几行是标准移位结构。把 $X_t$ 展开来看,第一行对应 $y_t = \phi_1 y_{t-1} + \cdots + \phi_p y_{t-p} + \varepsilon_t$,第二行对应 $y_{t-1} = y_{t-1}$,第三行对应 $y_{t-2} = y_{t-2}$,完全吻合。
3.2 用Companion矩阵的谱半径判断平稳性
向量化之后,对 $X_t$ 反复回代,可以得到:
$$X_t = \sum_{j=0}^{\infty} F^j e_1 \varepsilon_{t-j}$$
完全类比AR(1)的情形。这里 $F^j$ 起着“权重”的作用。如果 $F^j$ 随 $j$ 增大而衰减到零矩阵,那么级数收敛,$X_t$ 的各分量方差有限,过程平稳。那 $F^j$ 什么时候会衰减到零呢?这就要看 $F$ 的特征值了。
可以证明,Companion矩阵 $F$ 的特征值恰好等于差分方程特征根 $r_1, r_2, \ldots, r_p$(不是滞后多项式的根 $z$)。所以前面说的平稳条件“差分方程特征根全部落在单位圆内”,在这里就等价于 $F$ 的所有特征值模长都小于1。在矩阵分析里,这个性质叫作谱半径小于1:
$$\rho(F) = \max_i |\lambda_i(F)| < 1$$
谱半径小于1意味着什么?有个经典的结论:对任意矩阵,$\lim_{j\to\infty} F^j = 0$ 当且仅当 $\rho(F) < 1$。即使矩阵不可对角化,存在若尔当块,指数衰减依然成立——因为 $F^j$ 的元素是由 $\lambda_i^j$ 和 $j^k \lambda_i^{j-k}$ 这类项组合而成的,当 $|\lambda_i|<1$ 时,即使前面有多项式因子 $j^k$,最终也会被指数衰减压下去。
有了 $F^j$ 的指数衰减,$X_t$ 的协方差矩阵:
$$\Sigma_X = \sum_{j=0}^{\infty} F^j e_1 e_1^T (F^j)^T \sigma^2$$
因为每项的范数按 $\rho^{2j}$ 量级衰减,所以级数收敛。这从矩阵的视角完整地给出了平稳性证明。
用这个方法判断高阶AR模型的平稳性,在编程上特别方便。不用去显式求多项式根,直接构造矩阵然后计算所有特征值的模即可。后面讲代码实操时我会具体展示。
4. 矩视角的严格化:Yule-Walker方程与协方差稳定性
4.1 平稳AR(p)自协方差满足的递推关系
前面从解的角度证明了平稳性,这一节再从矩的角度给出一个配套视角。对于平稳的AR(p)过程,把模型两边同时乘以 $y_{t-k}$,再取期望,就能得到自协方差函数 $\gamma_k = E(y_t y_{t-k})$(这里默认均值为0;非零均值情形先中心化即可)满足:
$$\gamma_k = \phi_1 \gamma_{k-1} + \phi_2 \gamma_{k-2} + \cdots + \phi_p \gamma_{k-p}, \quad k \ge 1$$
右边其实就是AR方程中各项的协方差组合。$k=0$ 那个方程特殊一点,因为 $\varepsilon_t$ 和 $y_t$ 相关,从而:
$$\gamma_0 = \phi_1 \gamma_1 + \phi_2 \gamma_2 + \cdots + \phi_p \gamma_p + \sigma^2$$
这一组方程就是Yule-Walker方程。从证明的角度看,它说明了一件事:平稳AR(p)过程的自协方差函数必须满足一个p阶线性齐次差分方程($k \ge 1$时),其解的形式可以写成特征根幂次的线性组合:
$$\gamma_k = c_1 r_1^k + c_2 r_2^k + \cdots + c_p r_p^k$$
当所有差分方程特征根 $|r_i|<1$ 时,$\gamma_k$ 随着 $k$ 增大指数衰减到零。这和“短期相关、长期遗忘”的平稳过程特征是呼应的。反过来,如果某个 $|r_i|\ge 1$,自协方差不收敛到0,甚至直接发散,这就不满足平稳过程的定义了。
4.2 用谱密度与Yule-Walker矩阵理解“根在圆外”的必要性
还有一个非常直观的验证方式。平稳AR(p)过程的谱密度是:
$$f(\lambda) = \frac{\sigma^2}{2\pi \left| \Phi(e^{-i\lambda}) \right|^2}$$
如果 $\Phi(z)$ 在单位圆上有某个根,比如 $z_0 = e^{-i\lambda_0}$,那么分母在频率 $\lambda_0$ 处等于0,谱密度趋于无穷大。谱密度是自协方差序列的傅里叶变换,谱密度发散意味着自协方差序列不可求和,这对应于过程中的单位根或爆炸性成分。进一步看,由自协方差构成的Toeplitz矩阵:
$$ \Gamma_p = \begin{bmatrix} \gamma_0 & \gamma_1 & \cdots & \gamma_{p-1} \ \gamma_1 & \gamma_0 & \cdots & \gamma_{p-2} \ \vdots & \vdots & \ddots & \vdots \ \gamma_{p-1} & \gamma_{p-2} & \cdots & \gamma_0 \end{bmatrix} $$
在Yule-Walker估计中,我们解的线性方程组是 $\Gamma_p \phi = \gamma_p$。要想参数估计有唯一解,$\Gamma_p$ 必须是正定矩阵。单位根情形的谱密度发散,会使这个矩阵变成奇异或近似奇异的,估计也就不稳了。
我自己在推导Yule-Walker方程时学到了一个很深的体会:平稳性条件不只是为了让理论“好看”,它和估计的可行性是绑定的。如果根在单位圆上,$\Gamma_p$ 可能是奇异的,最小二乘估计和矩估计都可能出问题。这就是为什么建模第一步要检查平稳性,不纯粹是教条。
5. 代码实操:用多项式求根和模拟来验证平稳性
5.1 用polyroot和eigen快速判断AR系数是否平稳
理论说了一堆,最终都要落到能跑起来的工具上。我平时最常用的办法有两种:一是求滞后多项式根,二是构造Companion矩阵求特征根。两种方法选哪种,取决于你手头的数据格式。
如果你已经在软件里拿到AR系数 $\phi_1, \ldots, \phi_p$,用R可以这样做:
# 设定AR(2)系数 phi <- c(0.5, 0.2) # 滞后多项式系数:1, -phi1, -phi2 poly_coef <- c(1, -phi) # 求根并查看模长 z_roots <- polyroot(poly_coef) abs(z_roots)polyroot()返回的是滞后多项式 $\Phi(z)=0$ 的根,所以判断标准是模长全部大于1。如果打印出来是1.581和1.581这样的值,说明通过。
用Python的话,对应操作是:
import numpy as np phi = np.array([0.5, 0.2]) # 多项式系数:1, -phi1, -phi2 roots = np.roots(np.r_[1, -phi]) np.abs(roots)很多时候我更喜欢用Companion矩阵,尤其是当模型阶数较高时,数值上通常更稳定:
def is_stationary(phi): p = len(phi) F = np.zeros((p, p)) F[0, :] = phi if p > 1: F[1:, :-1] = np.eye(p - 1) eigvals = np.linalg.eigvals(F) return np.all(np.abs(eigvals) < 1), eigvals注意这里是看特征值的模长是否小于1,和polyroot的判断方向相反,因为Companion矩阵的特征值是差分方程特征根 $r$,它和滞后多项式根 $z$ 互为倒数。用的时候要看清自己算的是哪一套根。
除了直接看根,还可以通过模拟观察序列形态。用AR(2)系数 $\phi = (0.5, 0.2)$,生成300个观测,序列会围绕零均值小幅波动,不会出现持续偏离或爆炸性增长。如果换一组系数比如 $\phi = (1.2, -0.3)$,先算一下根,会看到有一个根的模长小于1,此时模拟出来的序列图像会出现明显的扩散趋势——这就是非平稳的典型表现。
5.2 边界情形:单位根过程模拟出来的“假回归”陷阱
平稳和发散之间还有一个非常容易迷惑人的地带——单位根过程和近单位根过程。单位根过程最简单的例子就是随机游走 $y_t = y_{t-1} + \varepsilon_t$,它对应AR(1)中 $\phi=1$,滞后多项式根恰好等于1,落在单位圆边界上。
模拟一个随机游走序列,如果不告诉你数据生成过程,光看图像,很多人会觉得它有趋势,甚至以为是一个带漂移的确定性趋势过程。实际做回归分析时,把两个相互独立的随机游走做回归,经常能得到高度显著的 $t$ 统计量,这就是伪回归现象。这个坑我在初学计量时踩过,相信不少人也踩过。
还有更微妙的边界形态——近单位根过程。比如 $\phi=0.99$ 的AR(1),理论上它是平稳的,因为 $|0.99|<1$,但衰减速度极慢。要区分这个过程和随机游走,需要非常大的样本量。有限样本下ADF检验的功效很低,经常无法拒绝单位根原假设。这时候不要直接下“这是单位根过程”的结论,更保险的做法是把特征根模长也算出来看看距离1有多近。
下表是我自己在实操中总结的快速判断参考:
| 特征多项式根的位置 | 差分方程特征根位置 | 过程性质 | 典型表现 |
|---|---|---|---|
| $ | z | >1$ 全部 | $ |
| 存在 $ | z | =1$ | 存在 $ |
| 存在 $ | z | <1$ | 存在 $ |
我在做模拟实验时,还会顺手生成多个样本路径,看不同路径之间的分歧程度。平稳过程的不同实现会围绕同一均值波动,长周期形态相似;单位根过程的不同实现则会越走越散。这个视觉判断往往比数值检验更直观。
6. 实战中的常见误区与排查技巧
6.1 单位圆内还是圆外:先弄清楚你算的是哪一种根
这是我见过最多的困惑,也是所有教材都不太强调的细节。同样一个平稳条件,用滞后多项式 $\Phi(z)=0$ 时要求根在单位圆外;用差分方程特征方程 $r^p - \phi_1 r^{p-1} - \cdots - \phi_p=0$ 时要求根在单位圆内。两个根互为倒数,所以结论一致,但表述完全不同。
如果在R里用polyroot(c(1, -phi)),算的是滞后多项式的根,判断标准是all(abs(roots) > 1);如果手动解差分方程或者用软件直接求矩阵的特征值,判断标准相反。我自己的习惯是写代码时用抽线函数封装好,注释里写清楚对应当前函数的判断方向,避免以后回头读代码时把自己绕晕。
6.2 平稳性证明不是ADF检验的替代品
ADF检验是实证里最常用的平稳性检验工具,但它检验的是“是否存在单位根”这个问题,它只是在统计意义上判断,不能替代对特征根的精确计算。尤其当样本量不大、根又很靠近单位圆时,ADF检验结果并不可靠。
反过来,用模拟数据做检验时,即使你知道真实的 $\phi=0.95$,在有限样本下ADF也经常给出无法拒绝单位根的结论。这并不说明过程非平稳,而是检验功效不足。理论上判断平稳性,看特征根位置就足够了;实证上判断具体数据是否平稳,则要结合检验和业务背景综合判断。这两种思路不要混在一起。
6.3 复根同样是允许的
高阶AR模型的特征根不一定全是实数,可能出现共轭复根。只要复根的模长严格大于1,过程依然是平稳的,并且复根的存在意味着ACF会出现波浪形的衰减振荡,这是周期性行为的来源,不是发散信号。
判断复根时一定要用模长 $|z|=\sqrt{a^2+b^2}$,而不是只看实部。有些入门者看多项式有个负实部的根就以为不稳定,这是错误的。判断平稳性只看模长是否离开单位圆。
6.4 AR(2)的平稳三角可以作为快速检验工具
对于二阶AR模型,平稳条件可以直接用系数表示成一个三角区域,不一定要每次求根。条件是:
$$|\phi_2| < 1, \quad \phi_1 + \phi_2 < 1, \quad \phi_2 - \phi_1 < 1$$
这个结论由特征方程根的约束转化而来,在实际建AR(2)模型时非常实用。你可以先把估计出来的系数画在 $(\phi_1, \phi_2)$ 平面上,看看落不落在平稳三角内——如果正好落在边界上,说明存在单位根。
但要注意:这个三角只对AR(2)成立,AR(3)及以上的平稳区域是更复杂的非线性曲面,没法靠几个不等式快速判断。阶数上来之后,老老实实用数值方法求根才靠谱。
6.5 平稳性证明和实际建模脱节怎么办
有些同学学完证明之后还是不知道怎么用在建模上。其实这个定理的最大价值是给你一个前置检查清单:拿到数据拟合AR模型后,第一件事不是看R方,而是看AR多项式的根。如果根已经接近单位圆,模型的长期预测方差会非常大,脉冲响应也不会收敛,此时模型并不适合做结构性解释和长期预测。
我自己在拟合完AR模型后,一定会跑一遍根检验,并顺手打印出各特征根的模长。即使ADF检验已经通过了,我也会看一眼根的数值。因为统计检验和理论判断是互补的——前者告诉你“样本中是否有足够证据拒绝单位根”,后者告诉你“模型结构上是否稳定”。两个都过关,才敢放心用这个模型去做后续的预测和分析。
写在最后的小建议
关于AR(p)平稳性证明,我最想分享的一个经验是:不要只背“根在单位圆外”这个结论,而是要把三种证明思路各推一遍。滞后算子展开适合理解充分性,Companion矩阵适合理解系统动态和写代码,Yule-Walker矩条件适合理解估计的可行性。三套视角合在一起,才能真正把平稳性这个概念内化。
在实际写代码验证时,我习惯把求根和判断封装成一个小函数,入参就是AR系数,输出包括滞后多项式的根、Companion矩阵的特征根、是否平稳这三个结果。每次拟合完模型就调用一次,比单独看某个检验统计量要直观得多。建议你也可以照着做一份,以后建模能省很多事。