4. 海洋时间序列的平稳性与自相关分析

在海洋数据时间序列分析中,平稳性是一个绕不开的前提概念。所谓平稳,直观地说,就是序列的统计特征不随时间整体漂移:均值大致恒定、方差不随时间放大或收缩、自协方差只与时间间隔有关而与具体时刻无关。海平面异常(Sea Level Anomaly, SLA)序列往往同时叠加了季节性信号、长期趋势和低频振荡,直接送入ARIMA模型前,必须先判断它是否满足平稳性要求,否则模型阶数估计和预测区间都会失真。

需要强调的是,平稳性检验不是“做一次就完事”的步骤,而是决定后续建模路径的分岔点。若序列非平稳,通常先做差分;差分阶数 d 的确定,正是ARIMA中 d 参数的来源。因此本节把平稳性检验、ACF/PACF 计算和阶数判断放在同一条分析链上讲解。

一、两类检验:ADF 与 KPSS 的分工

ADF检验(Augmented Dickey-Fuller)的原假设是“序列存在单位根,即非平稳”。它的备择假设是序列平稳。因此 ADF 的 p 值越小,越倾向于拒绝非平稳,认为序列平稳。KPSS检验则相反,原假设是“序列平稳(趋势平稳或水平平稳)”,p 值越小越倾向于拒绝平稳。两者原假设方向相反,配合使用能有效避免单一检验的误判。

实际操作中常见的四种组合判断如下:ADF 拒绝且 KPSS 不拒绝,判为平稳;ADF 不拒绝且 KPSS 拒绝,判为非平稳,需要差分;两者都拒绝,说明序列可能含趋势或结构变化,需先去除趋势再检验;两者都不拒绝,样本信息不足,应结合图形和业务背景谨慎判断。这个判断逻辑是本节最值得先建立起来的框架。

SLA 序列平稳性判断与 ARIMA 阶数确定路径 输入:SLA 月均序列 示例:1993–2022,共 360 点 并行执行 ADF 与 KPSS 检验 ADF:H₀=非平稳 KPSS:H₀=平稳 ADF 拒绝 + KPSS 不拒绝 判定:平稳 差分阶数 d = 0 ADF 不拒绝 + KPSS 拒绝 判定:非平稳 一阶差分后复检 两者均拒绝 含趋势或结构变化 先去趋势再检验 计算 ACF 与 PACF(差分后序列) 观察截尾 / 拖尾形态,读取候选 p、q 输出:ARIMA(p, d, q) 候选阶数

二、用 Python 完成检验与 ACF/PACF 计算

下面以一段模拟的 SLA 月均序列为例(示例数据,非实测),演示完整流程。数据构造为“线性上升趋势 + 年周期正弦 + 噪声”,便于观察非平稳到平稳的变化。

import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller, kpss
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

rng = np.random.default_rng(42)
t = np.arange(360)                      # 30 年 × 12 月
trend = 0.0025 * t                      # 缓慢上升趋势
season = 0.04 * np.sin(2 * np.pi * t / 12)
noise = rng.normal(0, 0.015, size=360)
sla = pd.Series(trend + season + noise,
                index=pd.date_range("1993-01", periods=360, freq="MS"))

def report(x, name):
    a_p = adfuller(x, autolag="AIC")[1]
    k_p = kpss(x, regression="c", nlags="auto")[1]
    print(f"{name}: ADF p={a_p:.4f}, KPSS p={k_p:.4f}")

report(sla, "原始序列")
report(sla.diff().dropna(), "一阶差分")

示例运行结果大致为:原始序列 ADF p≈0.62、KPSS p≈0.01,属于“ADF 不拒绝 + KPSS 拒绝”,判为非平稳;一阶差分后 ADF p≈0.001、KPSS p≈0.10,转为平稳,故取 d=1。注意 KPSS 的 p 值在超出查表范围时会被截断显示,解读时应结合统计量而非只看 p 值。

三、从 ACF/PACF 形态读阶数

对差分后的平稳序列绘制 ACF 与 PACF。经验判读规则是:ACF 在 q 阶后截尾、PACF 拖尾,提示 MA(q);PACF 在 p 阶后截尾、ACF 拖尾,提示 AR(p);两者都拖尾则考虑 ARMA。海洋SLA序列常因年周期残留而出现滞后12、24处的显著峰,这提示可在模型中引入季节项,或先做季节差分再判断。

d1 = sla.diff().dropna()
plot_acf(d1, lags=36)
plot_pacf(d1, lags=36, method="ywm")

若示例中 ACF 在滞后1处显著、随后快速衰减,PACF 在滞后1–2处显著后截断,则可初选 p=1~2、q=1,结合 d=1 得到 ARIMA(1,1,1) 或 ARIMA(2,1,1) 作为候选,再用 AIC/BIC 比较择优。需要提醒:ACF/PACF 只是初选工具,最终阶数应通过信息准则和残差白噪声检验确认,避免仅凭图形主观定阶。

判断顺序建议固定为:先看时序图与趋势 → 双检验定性 → 差分至平稳 → 差分序列上算 ACF/PACF → 候选阶数 → 信息准则与残差检验定稿。顺序颠倒容易在非平稳序列上得到虚假的强自相关。
KPSS 对长期趋势和结构突变较敏感,若SLA序列存在验潮站更换、卫星测高任务切换等造成的均值跳变,应先做断点处理,否则可能误判为“趋势平稳”而漏掉差分需求。

把上述步骤串起来,本节的核心产出就是一张可复用的判断表:检验结论决定 d,ACF/PACF 形态给出 p、q 的初值,三者共同构成 ARIMA 阶数的起点。后续建模与诊断,都建立在这一步判断是否可靠之上。