GAS模型¶
简介¶
广义自回归得分(GAS)模型是Creal等人(2013年)和Harvey(2013年)提出的一类针对非正态数据的观测驱动时间序列模型。对于一个具有观测值\(y_{t}\)和潜在时变参数\(x_{t}\)的条件观测密度\(p\left(y_{t}\mid{x_{t}}\right)\),我们假设参数\(x_{t}\)遵循以下递归关系:
例如,对于泊松分布密度,默认缩放为\(\exp\left(x_{j}\right)\),其时变参数遵循:
这类模型可被视为参数驱动状态空间模型的近似形式,在预测性能方面通常具有竞争力。如需了解超越简单自回归形式的更广义模型类别,请参阅GAS状态空间模型。本笔记本中讨论的简单GAS模型可视为非线性ARIMA过程的近似形式。
示例¶
以下我们展示一个关于计数数据的示例。该数据记录了某一年中世界上某个国家是否经历了银行业危机。
import numpy as np
import pyflux as pf
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
data = pd.read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/Ecdat/bankingCrises.csv")
numpy_data = np.sum(data.iloc[:,2:73].values,axis=1)
numpy_data[np.isnan(numpy_data)] = 0
financial_crises = pd.DataFrame(numpy_data)
financial_crises.index = data.year
financial_crises.columns = ["Number of banking crises"]
plt.figure(figsize=(15,5))
plt.plot(financial_crises)
plt.ylabel("Count")
plt.xlabel("Year")
plt.title("Number of banking crises across the world")
plt.show()
这里我们指定一个任意的\(GAS(2,0,2)\)模型,使用Poisson()族:
model = pf.GAS(ar=2, sc=2, data=financial_crises, family=pf.Poisson())
接下来我们估计潜在变量。对于这个例子,我们将使用最大似然点质量估计 \(z^{MLE}\):
x = model.fit("MLE")
x.summary()
PoissonGAS (2,0,2)
======================================== ==================================================
Dependent Variable: No of crises Method: MLE
Start Date: 1802 Log Likelihood: -497.8648
End Date: 2010 AIC: 1005.7297
Number of observations: 209 BIC: 1022.4413
===========================================================================================
Latent Variable Estimate Std Error z P>|z| 95% C.I.
========================= ========== ========== ======== ======== =========================
Constant 0.0 0.0267 0.0 1.0 (-0.0524 | 0.0524)
AR(1) 0.4502 0.0552 8.1544 0.0 (0.342 | 0.5584)
AR(2) 0.4595 0.0782 5.8776 0.0 (0.3063 | 0.6128)
SC(1) 0.2144 0.0241 8.8929 0.0 (0.1671 | 0.2616)
SC(2) 0.0571 0.0042 13.5323 0.0 (0.0488 | 0.0654)
===========================================================================================
我们可以绘制潜在变量 \(z^{MLE}\):使用 plot_z() 方法:
model.plot_z(figsize=(15,5))
我们可以使用plot_fit()来绘制样本内拟合图:
model.plot_fit(figsize=(15,10))
我们可以通过使用plot_predict_is()方法进行滚动样本内预测来了解模型的性能:
model.plot_predict_is(h=20, fit_once=True, figsize=(15,5))
如果我们想要绘制预测结果,可以使用plot_predict()方法:
model.plot_predict(h=10, past_values=30, figsize=(15,5))
如果我们希望以DataFrame格式获取预测结果,可以直接使用predict()方法。
类描述¶
-
class
GAS(data, ar, sc, integ, target, family)¶ 广义自回归评分模型 (GAS).
参数 类型 描述 data pd.DataFrame or np.ndarray 包含单变量时间序列 ar int 自回归滞后阶数 sc 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_ppc(T, nsims)¶ 绘制后验预测检查的直方图,使用用户选择的差异度量。此方法仅在使用贝叶斯推断进行拟合时有效。
参数 类型 描述 T function Discrepancy, e.g. np.meanornp.maxnsims int PPC需要进行多少次模拟 返回值: 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_sample(nsims, plot_data=True)¶ 绘制模型后验预测密度的样本。此方法仅适用于通过贝叶斯推断拟合的模型。
参数 类型 描述 nsims int 需要抽取的样本数量 plot_data boolean 是否同时绘制真实数据 返回 : void - 显示一个matplotlib绘图
-
plot_z(indices, figsize)¶ 返回潜在变量及其相关不确定性的绘图。
参数 类型 描述 indices int or list 要绘制的潜变量索引 figsize tuple matplotlib图形的大小 返回 : void - 显示一个matplotlib绘图
-
ppc(T, nsims)¶ 返回后验预测检验的p值。此方法仅在您使用贝叶斯推断进行拟合时才有效。
参数 类型 描述 T function Discrepancy, e.g. np.meanornp.maxnsims int PPC需要进行多少次模拟 返回值: int - 差异检验的p值
-
predict(h, intervals=False)¶ 返回模型预测结果的DataFrame。
参数 类型 描述 h int 预测向前多少步 intervals boolean 是否返回预测区间 请注意,如果您使用最大似然估计或变分推断,显示的区间将不会反映潜在变量的不确定性。只有Metropolis-Hastings方法能提供完全贝叶斯预测区间。由于平均场推断的局限性(未考虑后验相关性),变分推断的贝叶斯区间未予显示。
返回 : pd.DataFrame - 模型预测结果
-
predict_is(h, fit_once, fit_method)¶ 返回模型样本内滚动预测的DataFrame。
参数 类型 描述 h int 使用多少个先前的时间步 fit_once boolean 是否只拟合一次,还是每个时间步都拟合 fit_method str 选择哪种推断方法,例如'MLE' 返回 : pd.DataFrame - 模型预测结果
-
sample(nsims)¶ 返回从后验预测密度中抽取的数据的np.ndarray数组。此方法仅在您使用贝叶斯推断拟合模型时才有效。
参数 类型 描述 nsims int 进行多少次后验抽样 返回值 : np.ndarray - 来自后验预测密度的样本。
-
参考文献¶
Creal, D; Koopman, S.J.; Lucas, A. (2013). 广义自回归评分模型及其应用. 应用计量经济学杂志, 28(5), 777–795. doi:10.1002/jae.1279.
哈维, A.C. (2013). 《波动性与厚尾动态模型:在金融与经济时间序列中的应用》. 剑桥大学出版社.