使用状态空间简化ARIMA建模:基于TSMT 4.0的通胀建模

来源:Aptech 官方博客 · 作者:Eric · 发表时间:2025年6月2日 · 更新:2025年6月18日

 


📖 文章目录

引言

状态空间模型是分析时间序列数据的强大工具,特别是在需要估计趋势或周期等不可观测成分时。但传统上,即使对于像ARIMA这样常见的模型,设置这些模型也可能非常繁琐。

GAUSS arimaSS 函数,包含在 Time Series MT 4.0 库中,能让你在不手动构建完整状态空间结构的情况下估计状态空间ARIMA模型。这是一种更简洁、更快速、更可靠的ARIMA模型工作方式。

本文将使用来自美联储经济数据库(FRED)的最新数据,重温我们之前的通胀建模示例。在此过程中,我们将演示arimaSS的工作原理、如何简化建模流程,以及如何轻松地从结果生成预测。


为什么在TSMT中使用arimaSS

在我们之前的状态空间通胀示例中,我们手动设置了状态空间模型。这个过程需要对状态空间建模有深入理解,特别是:

  • 设置系统矩阵
  • 初始化状态向量
  • 管理模型动态
  • 指定参数起始值

相比之下,arimaSS函数自动处理所有这些设置。它在内部构建适当的模型结构,并使用标准的ARIMA规范运行卡尔曼滤波。

总体而言,arimaSS函数提供:

  • 简化的语法:无需手动定义矩阵或系统动态。这不仅节省时间,还减少了出错或模型设定错误的机会。
  • 更稳健的估计:幕后的改进,如增强的协方差计算和平稳性强制实施,带来了更准确和稳定的参数估计。
  • 与预测工具的兼容性arimaSS的输出结构直接与TSMT工具集成,用于计算和绘制预测。

arimaSS过程

arimaSS过程有两个必需的输入:

  1. 一个时间序列数据集
  2. AR阶数

它还允许四个可选输入用于模型自定义:

  1. 差分阶数
  2. 移动平均阶数
  3. 一个指示变量,控制是否在模型中包含常数项
  4. 一个指示变量,控制是否在模型中包含趋势项

基本用法

aOut = arimaSS(y, p [, d, q, trend, const]);

Y
Tx1 或 Tx2 时间序列数据。可包含日期变量,该变量会从数据矩阵中移除,不作为回归变量包含在模型中。
p
标量,模型中包含的自回归滞后阶数。
d
可选,标量,差分阶数。默认值 = 0。
q
可选,标量,移动平均阶数。默认值 = 0。
trend
可选,标量,指示变量,是否在模型中包含趋势项。设置为1包含趋势,0不包含。默认值 = 0。
const
可选,标量,指示变量,是否在模型中包含常数项。设置为1包含常数,0不包含。默认值 = 1。

所有返回值都存储在 arimaOut 结构中,包括:

  • 估计参数
  • 模型诊断和汇总统计
  • 模型描述

arimaOut 结构的完整内容包括:

成员 描述
amo.aic Akaike信息准则值。
amo.b 估计的模型系数(Kx1向量)。
amo.e 拟合模型的残差(Nx1向量)。
amo.ll 模型的对数似然值。
amo.sbc Schwarz贝叶斯准则值。
amo.lrs 似然比统计量向量(Lx1)。
amo.vcb 估计系数的协方差矩阵(KxK)。
amo.mse 残差的均方误差。
amo.sse 误差平方和。
amo.ssy 因变量的总平方和。
amo.rstl kalmanResult 结构实例,包含卡尔曼滤波结果。
amo.tsmtDesc tsmtModelDesc 结构实例,包含模型描述详情。
amo.sumStats tsmtSummaryStats 结构实例,包含汇总统计量。

实例:通胀建模

今天,我们将使用一个简单(尽管朴素)的通胀模型。该模型基于从 FRED CPIAUCNS月度数据集创建的CPI通胀指数。

首先,我们将直接从FRED数据库加载和准备数据。

从FRED加载数据

使用 fred_loadfred_set 过程,我们将:

  • 从FRED拉取连续复利年化变化率数据
  • 包含1971年1月(1971m1)开始的数据
// 设置观测开始日期
fred_params = fred_set("observation_start", "1971-01-01");

// 指定单位为连续复利年化变化率
fred_params = fred_set("units", "cca");

// 指定要拉取的序列
series = "CPIAUCNS";

// 从FRED拉取数据
cpi_data = fred_load(series, fred_params);

// 预览数据
head(cpi_data);

这将输出前五个观测值:

            date         CPIAUCNS
      1971-01-01        0.0000000
      1971-02-01        3.0112900
      1971-03-01        3.0037600
      1971-04-01        2.9962600
      1971-05-01        5.9701600

为进一步预览我们的数据,让我们使用 plotXY 过程和公式字符串创建一个通胀系列的快速图表:

plotXY(cpi_data, "CPIAUCNS~date");

为了更直观,让我们添加一条参考线来可视化美联储的长期平均通胀目标(2%):

// 在2%处添加通胀目标线
plotAddHLine(2);

基于美国CPI的通胀率与通胀目标线

最后再做一个可视化,让我们看看5年(60个月)的移动平均线:

// 计算移动平均
ma_5yr = movingAve(cpi_data[., "CPIAUCNS"], 60);

// 添加到时间序列图
plotXY(cpi_data[., "date"], ma_5yr);

// 在2%处添加通胀目标线
plotAddHLine(2);

5年移动平均美国CPI通胀率与通胀目标线

移动平均图突出了长期趋势,过滤了短期波动和噪声:

  1. 反通胀时期(约1980-1993年):这一时期的标志是通胀率从1980年代初的两位数高点急剧下降到1990年代初的约3%,这是美联储实施激进货币政策的结果。
  2. "大缓和"时期(1990年代中期至2000年代中期):通胀保持相对稳定和低位,徘徊在美联储2%的目标附近,图中用水平线标记作为参考。
  3. 金融危机后停滞(2008-2020年):2008年全球金融危机后,通胀趋势进一步走低,5年平均线在较长时间内低于2%,反映了需求疲软和持续的经济疲软。
  4. 近期飙升:大约2021年开始的急剧上升反映了疫情后的通胀飙升,将5年平均线推至十多年来首次超过3%。

在估计之前,我们将进行最后一项转换,将"CPIAUCNS"的值从百分比转换为小数:

cpi_data[., "CPIAUCNS"] = cpi_data[., "CPIAUCNS"]/100;
注意:fred_load过程需要有效的API密钥。要从FRED直接下载数据到GAUSS,您必须从 FRED 获取API密钥并在GAUSS中设置。有关从FRED导入数据的更多详情,请参阅我们之前的博客文章 将FRED数据导入GAUSS

ARIMA估计

现在我们已经加载了数据,准备使用arimaSS来估计模型。我们从简单的AR(2)模型开始。基于之前的可视化,包含常数项但不包含趋势项是合理的,因此我们将对这些选项使用默认设置。

call arimaSS(cpi_data, 2);

关于这一点,有几点需要注意:

  1. 我们不需要在将 cpi_data 传递给 arimaSS 之前移除日期向量。大多数 TSMT 函数允许你在时间序列中包含日期向量。实际上,这是推荐的做法,GAUSS会自动检测并使用日期向量生成更具信息性的结果报告。
  2. 在此示例中,我们没有存储输出。相反,我们使用 call 关键字将其直接打印到屏幕上。
  3. 由于这严格来说是一个AR模型,并且我们使用的是默认的确定性成分,我们只需要两个输入:数据和AR阶数。

详细的估计结果将打印到屏幕上:

================================================================================
模型:                ARIMA(2,0,0)          因变量:                CPIAUCNS
时间跨度:          1971-01-01:             有效样本量:                  652
                    2025-04-01
SSE:                      0.839          自由度:                      648
对数似然:            -1244.565          RMSE:                      0.036
AIC:                  -2497.130          SEE:                       0.210
SBC:                  -2463.210          Durbin-Watson:             1.999
R-squared:               0.358          Rbar-squared:              0.839
================================================================================
系数                  估计值          标准误          T统计量         P值
--------------------------------------------------------------------------------

常数项                 0.03832        0.00349         10.97118        0.00000
CPIAUCNS L(1)          0.59599        0.03715         16.04180        0.00000
CPIAUCNS L(2)          0.00287        0.03291          0.08726        0.93046
Sigma2 CPIAUCNS        0.00129        0.00007         18.05493        0.00000
================================================================================

从结果中有一些有趣的发现:

  1. 估计的常数项在统计上显著,等于0.038(3.8%)。这高于美联储2%的长期通胀目标,但相差不大。还需注意,我们的数据集在正式的美联储通胀目标时代之前很久就开始了。
  2. 所有系数在统计上均显著,除了CPIAUCNS L(2)系数。
  3. 表格表头包含我们数据的时间跨度。这是因为我们在输入中包含了日期向量,所以自动检测到了。如果不包含日期向量,时间跨度将报告为 unknown

附加内容:循环进行模型选择

arimaSS过程目前不提供内置的最优滞后选择。但是,我们可以编写一个简单的 for 循环,使用结构数组来识别最佳滞后长度。

我们的目标是选择具有最低AIC的模型,最大允许滞后数为6。

两个工具将帮助我们完成这项任务:

  1. 一个结构数组,用于存储每个模型的结果
  2. 一个向量,用于存储每个模型的AIC值
// 设置最大滞后数
maxlags = 6;

// 声明单个数组
struct arimamtOut amo;

// 重塑以创建结构数组
amo = reshape(amo, maxlags, 1);

// AIC存储向量
aic_vector = zeros(maxlags, 1);

接下来,我们将循环遍历模型。在每次迭代中,我们将:

  1. 将结果存储在一个单独的 arimamtOut 结构中
  2. 提取AIC并将其存储在我们的AIC向量中
  3. 调整样本量,使每次滞后选择迭代使用相同的观测数量
// 循环遍历滞后可能性
for i(1, maxlags, 1);
    // 修剪数据以保持样本量一致性
    y_i = trimr(cpi_data, maxlags-i, 0);

    // 估计当前的 AR(i) 模型
    amo[i] = arimaSS(y_i, i);

    // 存储AIC便于比较
    aic_vector[i] = amo[i].aic;
endfor;

最后,我们将使用 minindc 过程来查找最小AIC的索引:

// 最优滞后等于最小AIC的位置
opt_lag = minindc(aic_vector);

// 打印最优滞后数
print "Optimal lags:"; opt_lag;

// 选择最终的输出结构
struct arimamtOut amo_final;
amo_final = amo[opt_lag];

基于最小AIC的最优滞后数为8,得到以下结果:

================================================================================
模型:                ARIMA(8,0,0)          因变量:                CPIAUCNS
时间跨度:          1971-01-01:             有效样本量:                  652
                    2025-04-01
SSE:                      0.803          自由度:                      642
对数似然:            -1258.991          RMSE:                      0.035
AIC:                  -2537.982          SEE:                       0.080
SBC:                  -2453.182          Durbin-Watson:             1.998
R-squared:               0.385          Rbar-squared:              0.939
================================================================================
系数                  估计值          标准误          T统计量         P值
--------------------------------------------------------------------------------

常数项                 0.03824        0.00512          7.46526        0.00000
CPIAUCNS L(1)          0.58055        0.03917         14.82047        0.00000
CPIAUCNS L(2)         -0.03968        0.04730         -0.83883        0.40156
CPIAUCNS L(3)         -0.01156        0.05062         -0.22833        0.81939
CPIAUCNS L(4)          0.09288        0.04151          2.23749        0.02525
CPIAUCNS L(5)          0.02322        0.04773          0.48639        0.62669
CPIAUCNS L(6)         -0.06863        0.04505         -1.52333        0.12767
CPIAUCNS L(7)          0.16048        0.04038          3.97391        0.00007
CPIAUCNS L(8)         -0.00313        0.02778         -0.11281        0.91018
Sigma2 CPIAUCNS        0.00123        0.00007         18.05512        0.00000
================================================================================
值得注意的是,只有第1阶、第4阶和第7阶滞后的系数在统计上显著。这表明只包含这些滞后的模型可能更加合适。

结论

arimaSS函数提供了一种简化的方法来估计状态空间形式的ARIMA模型,消除了手动指定系统矩阵和初始值的需要。这使得探索模型、试验滞后结构和生成预测更加容易,特别是对于可能不熟悉状态空间建模的用户。

延伸阅读

  1. 时间序列数据分析基础入门
  2. 将FRED数据导入GAUSS
  3. 理解状态空间模型(通胀示例)
  4. GAUSS时间序列入门

 

 


 

在线留言

尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。

 

 

 

 

联系我们

 

微信公众号

咨询微信

企业店铺

400-621-1085

(节假日期间办公室座机如无人接听,请选择其他联系方式,感谢理解!祝您节日快乐!)

 

联系我们 快速链接 相关产品 上海卡贝信息技术有限公司

©2026  上海卡贝信息技术有限公司

产品中心

下载中心

站点地图

隐私政策

 

销售QQ咨询

产品QQ咨询

淘宝店铺

 

综述

GAUSS产品

应用程序

第三方应用程序

最新更新:26版

相关文档

下载试用

购买咨询

 

SAS

GraphPad Prism

LISREL

SmarPLS

Stata

HLM

IRTPRO

TreeAge

Design-Expert

IBM SPSS Statistics

EViews

RATS

SigmaPlot

EndNote

Citavi

LINGO

@RISK

BayesiaLab

Hugin

E-Prime

XLfit