Wang Haihua
🍈 🍉🍊 🍋 🍌
差分方法是一种非常简便、有效的确定性信息提出方法。Cramer 分解 定理在理论上保证了适当阶数的差分一定可以充分提取确定性信息。差分 运算的实际是使用自回归的方式提取确定性信息。 $$ \nabla^{d} X_{t}=(1-B)^{d} X_{t}=\sum_{i=0}^{d}(-1)^{i} C_{d}^{i} X_{t-i} $$
在实践操作中, 我们会根据序列不同的特点选择合适的差分方式, 常见 情况有以下三种:
(1)序列蕴含着显著的线性趋势,一阶差分就可以实现平稳。
(2)序列蕴含着曲线趋势, 通常二阶或三阶差分就可以提取曲线趋势 的影响。
(3) 对于蕴含着固定周期的序列进行步长为周期长度的差分运算, 通 常可以较好地提取周期信息。
从理论上来说,足够多次的差分运算可以充分地提取原序列中的非平稳确定性信息,但是,过度的差分会造成有用信息的浪费。因此,在实际运用中差分运算阶数应当要适当,避免过度差分。
差分运算具有强大的确定信息提取能力, 对差分运算后得到的平稳序 列可用 ARMA 模型进行拟合。 具有如下结构的模型称为 $\operatorname{ARIMA}(p, d, q)$ 模型: $$ \left\{\begin{array}{l} \phi(B) \nabla^{d} X_{t}=\theta(B) \varepsilon_{t}, \\ E\left(\varepsilon_{t}\right)=0, \quad \operatorname{Var}\left(\varepsilon_{t}\right)=\sigma_{\varepsilon}^{2}, \quad E\left(\varepsilon_{t} \varepsilon_{s}\right)=0, \quad s \neq t, \\ E\left(X_{s} \varepsilon_{t}\right)=0, \quad \forall s<t . \end{array}\right. $$ 特别地, 当 $d=0$ 时, $\operatorname{ARIMA}(p, d, q)$ 模型实际上就是 $\operatorname{ARMA}(p, q)$ 模型;
当 $p=0$ 时, $\operatorname{ARIMA}(p, d, q)$ 模型实际上就是 IMA( $d, q)$ 模型; 当 $q=0$ 时, $\operatorname{ARIMA}(p, d, q)$ 模型实际上就是 $\operatorname{ARI}(p, d)$ 模型; 当 $d=1, p=q=0$ 时, $\operatorname{ARIMA}(p, d, q)$ 模型记为 $$ \left\{\begin{array}{l} X_{t}=X_{t-1}+\varepsilon_{t}, \\ E\left(\varepsilon_{t}\right)=0, \quad \operatorname{Var}\left(\varepsilon_{t}\right)=\sigma_{\varepsilon}^{2}, \quad E\left(\varepsilon_{t} \varepsilon_{s}\right)=0, s \neq t, \\ E\left(X_{s} \varepsilon_{t}\right)=0, \quad \forall s<t . \end{array}\right. $$ 该模型称为随机游走模型。 ARIMA 模型建模与 ARMA 模型建模过程类似。
例 $18.6$ 试利用文件 austa.csv, 建立适当的 ARIMA 模型, 其中 austa.csv 中的数据格式如图 $18.7$ 所示, 共 31 个数据。
解 原始数据的一次差分及差分数据的自相关图如图 18.8。通过试着 取 $p, q$ 的一些值, 根据 AIC 和 BIC 等指标, 确定建立 $A R I M A(2,1,0)$ 模型。利 用 Python 软件, 求得的残差取值及分布如图 $18.9$ 所示。得到的预测值与 原始数据的对比如图 $18.10$ 所示。
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf
import pylab as plt
from statsmodels.tsa.arima_model import ARIMA
plt.rc('axes',unicode_minus=False)
plt.rc('font',size=16); plt.rc('font',family='SimHei')
df=pd.read_csv('data/austa.csv')
plt.subplot(121); plt.plot(df.value.diff())
plt.title('一次差分')
ax2=plt.subplot(122)
plot_acf(df.value.diff().dropna(), ax=ax2,title='自相关')
md=ARIMA(df.value, order=(2,1,0))
mdf=md.fit(disp=0)
print(mdf.summary())
residuals = pd.DataFrame(mdf.resid)
fig, ax = plt.subplots(1,2)
residuals.plot(title="残差", ax=ax[0])
residuals.plot(kind='kde', title='密度', ax=ax[1])
plt.legend(''); plt.ylabel('')
mdf.plot_predict() #原始数据与预测值对比图
plt.show()
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf
import pylab as plt
from statsmodels.tsa.arima_model import ARIMA
plt.rc('axes',unicode_minus=False)
plt.rc('font',size=16); plt.rc('font',family='SimHei')
df=pd.read_csv('data/austa.csv')
plt.subplot(121); plt.plot(df.value.diff())
plt.title('一次差分')
ax2=plt.subplot(122)
plot_acf(df.value.diff().dropna(), ax=ax2,title='自相关')
md=ARIMA(df.value, order=(2,1,0))
mdf=md.fit(disp=0)
print(mdf.summary())
residuals = pd.DataFrame(mdf.resid)
fig, ax = plt.subplots(1,2)
residuals.plot(title="残差", ax=ax[0])
residuals.plot(kind='kde', title='密度', ax=ax[1])
plt.legend(''); plt.ylabel('')
mdf.plot_predict() #原始数据与预测值对比图
plt.show()
C:\Users\reformship\AppData\Roaming\Python\Python38\site-packages\statsmodels\tsa\arima_model.py:472: FutureWarning: statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arima_model.ARIMA have been deprecated in favor of statsmodels.tsa.arima.model.ARIMA (note the . between arima and model) and statsmodels.tsa.SARIMAX. These will be removed after the 0.12 release. statsmodels.tsa.arima.model.ARIMA makes use of the statespace framework and is both well tested and maintained. To silence this warning and continue using ARMA and ARIMA until they are removed, use: import warnings warnings.filterwarnings('ignore', 'statsmodels.tsa.arima_model.ARMA', FutureWarning) warnings.filterwarnings('ignore', 'statsmodels.tsa.arima_model.ARIMA', FutureWarning) warnings.warn(ARIMA_DEPRECATION_WARN, FutureWarning)
ARIMA Model Results ============================================================================== Dep. Variable: D.value No. Observations: 30 Model: ARIMA(2, 1, 0) Log Likelihood 10.767 Method: css-mle S.D. of innovations 0.169 Date: Fri, 20 May 2022 AIC -13.534 Time: 23:49:38 BIC -7.930 Sample: 1 HQIC -11.741 ================================================================================= coef std err z P>|z| [0.025 0.975] --------------------------------------------------------------------------------- const 0.1560 0.030 5.125 0.000 0.096 0.216 ar.L1.D.value 0.2224 0.178 1.251 0.211 -0.126 0.571 ar.L2.D.value -0.2435 0.177 -1.375 0.169 -0.591 0.104 Roots ============================================================================= Real Imaginary Modulus Frequency ----------------------------------------------------------------------------- AR.1 0.4566 -1.9744j 2.0265 -0.2138 AR.2 0.4566 +1.9744j 2.0265 0.2138 -----------------------------------------------------------------------------