DAR模型¶
简介¶
高斯状态空间模型——通常被称为结构时间序列或不可观测成分模型——提供了一种将时间序列分解为多个不同成分的方法。如果误差项联合服从高斯分布,则可以使用卡尔曼滤波器以闭合形式提取这些成分,并通过预测误差分解和最大似然估计来估计参数。
我们可以在这个框架中编写一个动态自回归模型如下:
换句话说,动态自回归系数遵循随机游走。
示例¶
我们将对年度太阳黑子数据运行一个动态自回归(DAR)模型:
import numpy as np
import pandas as pd
import pyflux as pf
from datetime import datetime
import matplotlib.pyplot as plt
%matplotlib inline
data = pd.read_csv('https://vincentarelbundock.github.io/Rdatasets/csv/datasets/sunspot.year.csv')
data.index = data['time'].values
plt.figure(figsize=(15,5))
plt.plot(data.index,data['sunspot.year'])
plt.ylabel('Sunspots')
plt.title('Yearly Sunspot Data');
这里我们指定了一个任意的DAR(9)模型(注意:该模型可能存在过度参数化的问题)。
model = pf.DAR(data=data, ar=9, integ=0, target='sunspot.year')
接下来我们估计潜在变量。对于这个例子,我们将使用最大似然点质量估计 \(z^{MLE}\):
x = model.fit("MLE")
x.summary()
DAR(9, integrated=0)
====================================== =================================================
Dependent Variable: sunspot.year Method: MLE
Start Date: 1709 Log Likelihood: -1179.097
End Date: 1988 AIC: 2380.194
Number of observations: 280 BIC: 2420.1766
========================================================================================
Latent Variable Estimate Std Error z P>|z| 95% C.I.
======================= ========== ========== ======== ======== ========================
Sigma^2 irregular 0.301
Constant 60.0568 23.83 2.5202 0.0117 (13.3499 | 106.7637)
Sigma^2 AR(1) 0.005
Sigma^2 AR(2) 0.0
Sigma^2 AR(3) 0.0005
Sigma^2 AR(4) 0.0001
Sigma^2 AR(5) 0.0002
Sigma^2 AR(6) 0.0011
Sigma^2 AR(7) 0.0002
Sigma^2 AR(8) 0.0003
Sigma^2 AR(9) 0.032
=========================================================================================
注意结果表中没有标准误差,因为它显示的是转换后的参数。如果我们想要标准误差,可以调用x.summary(transformed=False)。接下来我们将使用plot_fit()绘制样本内拟合和动态系数:
model.plot_fit(figsize=(15,10))
初始阶段的剧烈变化反映了扩散初始化的影响;结合较高的初始不确定性,这导致在序列初期会有更强的更新。我们可以使用plot_predict进行前向预测:
我们可以通过plot_predict()方法进行向前预测:
model.plot_predict(h=50, past_values=40, figsize=(15,5))
这里的预测区间并不现实,反映了我们选择的高斯分布假设——太阳黑子数量不可能为负!——但如果我们只想要预测值本身,可以使用predict()方法。
类描述¶
-
class
DAR(data, ar, integ, target, family)¶ 动态自回归模型 (DAR).
参数 类型 描述 data pd.DataFrame or np.ndarray 包含单变量时间序列 ar int 自回归滞后阶数 integ int 数据差分次数 (默认: 0) target string or int 指定使用DataFrame/array中的哪一列。 family pf.Family instance The distribution for the time series, e.g pf.Normal()属性
-
latent_variables¶ 一个包含模型潜在变量信息的pf.LatentVariables()对象,包括先验设置、任何拟合值、初始值和其他潜在变量信息。当模型被拟合时,这里就是潜在变量被更新/存储的地方。有关此对象内属性的信息以及访问潜在变量信息的方法,请参阅潜在变量文档。
方法
-
adjust_prior(index, prior)¶ 调整模型潜在变量的先验分布。潜在变量及其索引可以通过打印附加到模型实例的
latent_variables属性来查看。参数 类型 描述 index int 要更改的潜变量索引 prior pf.Family instance Prior distribution, e.g. pf.Normal()返回: void - 修改模型的
latent_variables属性
-
fit(method, **kwargs)¶ 估计模型的潜在变量。用户选择一个推断选项,该方法会返回一个结果对象,同时更新模型的
latent_variables属性。参数 类型 描述 method str 推断选项:例如 'M-H' 或 'MLE' 请参阅文档中的贝叶斯推断和经典推断部分,了解完整的推断选项列表。可以输入与所选特定推断模式相关的可选参数。
返回: 包含估计潜在变量信息的pf.Results实例
-
plot_fit(**kwargs)¶ 绘制模型对数据的拟合情况。可选参数包括figsize,即绘图图形的尺寸。
返回 : void - 显示一个matplotlib绘图
-
plot_predict(h, past_values, intervals, **kwargs)¶ 绘制模型的预测结果,并附带置信区间。
参数 类型 描述 h int 预测向前多少步 past_values int 要绘制的历史数据点数量 intervals boolean 是否绘制区间 可选参数包括figsize - 图表绘制的尺寸。请注意 如果您使用最大似然估计或变分推断,显示的区间将不会 反映潜在变量的不确定性。只有Metropolis-Hastings方法能提供完全贝叶斯 预测区间。由于平均场推断的局限性(无法考虑后验相关性), 变分推断的贝叶斯区间不予显示。
返回 : void - 显示一个matplotlib绘图
-
plot_predict_is(h, fit_once, fit_method, **kwargs)¶ 绘制模型在样本内的滚动预测。这意味着用户假装数据的最后一部分是样本外的,并在每个时间段后进行预测并评估其表现。用户可以选择是在开始时一次性拟合参数,还是在每个时间步都进行拟合。
参数 类型 描述 h int 使用多少个先前的时间步 fit_once boolean 是否只拟合一次,还是每个时间步都拟合 fit_method str 选择哪种推断方法,例如'MLE' 可选参数包括figsize - 要绘制的图形尺寸。h是一个整数,表示要模拟性能的前几步。
返回 : void - 显示一个matplotlib绘图
-
plot_z(indices, figsize)¶ 返回潜在变量及其相关不确定性的绘图。
参数 类型 描述 indices int or list 要绘制的潜变量索引 figsize tuple matplotlib图形的大小 返回 : void - 显示一个matplotlib绘图
-
predict(h)¶ 返回模型预测结果的DataFrame。
参数 类型 描述 h int 预测向前多少步 返回 : pd.DataFrame - 模型预测结果
-
predict_is(h, fit_once, fit_method)¶ 返回模型样本内滚动预测的DataFrame。
参数 类型 描述 h int 使用多少个先前的时间步 fit_once boolean 是否只拟合一次,还是每个时间步都拟合 fit_method str 选择哪种推断方法,例如'MLE' 返回 : pd.DataFrame - 模型预测结果
-
simulation_smoother(beta)¶ 返回从Durbin和Koopman(2002)模拟平滑器中抽取的数据的np.ndarray数组。
参数 类型 描述 beta np.array 潜在变量的np.array数组 如果已经拟合了模型,建议直接使用model.latent_variables.get_z_values()作为beta输入。
返回 : np.ndarray - 来自模拟平滑器的样本
-
参考文献¶
Durbin, J. 和 Koopman, S. J. (2002). 一种简单高效的状态空间时间序列分析模拟平滑器。Biometrika, 89(3):603–615.
Harvey, A. C. (1989). 《预测、结构时间序列模型与卡尔曼滤波》。 剑桥大学出版社,剑桥。