状态空间模型和卡尔曼滤波器在时间序列建模中的缺点是什么?


53

考虑到状态空间模型和KF的所有良好特性,我想知道- 状态空间建模并使用卡尔曼滤波器(或EKF,UKF或粒子滤波器)进行估计的缺点是什么?笼统地说,是ARIMA,VAR或即席/启发式方法之类的常规方法。

它们难于校准吗?他们是否复杂且很难看到模型结构的变化将如何影响预测?

或者,换种说法-传统ARIMA,VAR与状态空间模型相比有什么优势?

我只能想到状态空间模型的优点

  1. 它可以轻松地处理某些静态模型的结构破坏,移位,时变参数-只需使这些参数成为状态空间模型的动态状态,模型便会自动适应任何参数移位;
  2. 它非常自然地处理丢失的数据,只需执行KF的过渡步骤,而不执行更新步骤;
  3. 它允许更改状态空间模型本身的动态参数(噪声和过渡/观测矩阵的协方差),因此,如果您当前的观测值来自与其他观测值略有不同的源,则无需进行任何操作即可轻松将其合并到估计中有什么特别的
  4. 使用上述属性,可以轻松处理不规则空间的数据:根据观察之间的间隔每次更改模型,或者使用规则的间隔并将没有观察的间隔视为丢失数据;
  5. 它允许在同一模型中同时使用来自不同来源的数据来估算一个基础数量;
  6. 它允许从几个可解释的,不可观察的动态成分构建模型并进行估计;
  7. 任何ARIMA模型都可以以状态空间形式表示,但是只有简单的状态空间模型可以以ARIMA形式精确表示。

1
正如您在第一点提到的那样,JFew的其他优势可以轻松地包含多个级别转换和离群值。以我的经验,状态空间比ARIMA更容易识别结构性中断。还可以轻松地合并外生变量的非线性影响。不需要时间序列数据是固定的,这是一个巨大的+。
预测者

2
好吧,我会随时通过ARIMA进行状态空间模型的研究。我可以想到两个缺点(一种):a)ARIMA模型的相应状态空间模型在设计矩阵中有很多不必要的零。有人可能会说ARIMA更紧凑。b)存在非线性/非高斯模型,这些模型很少具有有时可以用ARIMA形式描述的分析形式,但在传统状态空间中很难做到。
Cagdas Ozgenc

2
@Kochede Durbin和Koopman似乎也没有想到许多缺点-他们在其出色的教科书中第52页底部提到了两个。我想说这些缺点不再是正确的。

2
几个问题 。是否可以清楚地识别时间趋势变化并报告趋势变化的时间点?是否区分参数变化和误差方差变化并对此进行报告?它是否检测并报告围绕用户指定的预测变量的特定超前和滞后效应?在声明电平转换/本地时间趋势之前,可以指定一组中的最小数量的值吗?是否可以区分功率变换的需求和误差方差发生变化的确定时间点?ARMAX模型充分考虑了所有这些因素。
IrishStat 2013年

1
为了完整起见,在某些情况下的缺点是您必须对其进行解释。那取决于你的听众。如果有人希望将其视为与选择技术无关或无关紧要的事情,我会感到很高兴。
Nick Cox

Answers:


25

这是一些我可以从您的评论中得出的缺点的初步清单。非常欢迎批评和补充!

总体而言-与ARIMA相比,状态空间模型使您可以对更复杂的流程进行建模,具有可解释的结构并轻松处理数据不规则性;但是为此,您需要付出的代价是增加模型的复杂性,更难进行校准,减少社区知识。

  1. ARIMA是一种通用逼近器-您不在乎数据背后的真实模型是什么,而可以使用通用ARIMA诊断和拟合工具对这个模型进行逼近。这就像多项式曲线拟合-您不在乎什么是真正的函数,您始终可以使用某种程度的多项式对其进行近似。
  2. 状态空间模型自然要求您为过程写下一些合理的模型(这很好-您可以使用对过程的先验知识来改进估计)。当然,如果您对过程一无所知,则始终可以使用一些通用的状态空间模型-例如,以状态空间形式表示ARIMA。但是,ARIMA的原始形式具有更简洁的表述-而不引入不必要的隐藏状态。
  3. 由于状态空间模型的表述种类繁多(比ARIMA模型的类要丰富得多),因此对所有这些潜在模型的行为都没有很好的研究,并且如果您制定的模型很复杂,则很难说出它的行为方式在不同的情况下。当然,如果您的状态空间模型很简单或由可解释的组件组成,则不会出现此类问题。但是ARIMA始终是经过充分研究的ARIMA,因此即使使用它来近似某个复杂过程,也应该更容易预期其行为。
  4. 因为状态空间允许您直接和准确地对复杂/非线性模型进行建模,所以对于这些复杂/非线性模型,您可能会遇到滤波/预测稳定性(EKF / UKF散度,粒子滤波器退化)的问题。您还可能在校准复杂模型的参数时遇到问题-这是一个计算困难的优化问题。ARIMA很简单,具有较少的参数(1个噪声源代替2个噪声源,没有隐藏变量),因此其校准更加简单。
  5. 对于状态空间,统计社区中的社区知识和软件要少于ARIMA。

1
您是否知道在没有真实的基础模型的情况下,卡尔曼滤波器在预测时间序列方面比简单的移动平均或exp平滑表现更好的任何实际示例/工业应用程序(因此排除了由物理定律引起的模型) ?在大多数论文中,性能看起来非常相似(学术论文对新的,原始的,复杂的模型具有积极的性能偏见)。在大多数情况下,对于指定Klaman滤波器所需的线性状态系统模型和协方差等知识不了解...
Mannaggia 2014年

这是真的。我的实践中仍然有一个例子。如果您有一些通用模型(例如线性回归),则可以使它的参数状态为卡尔曼滤波器,并对其进行动态估计。当然,您也可以只在每个时间步调整模型,但这比单次KF更新要昂贵得多。如果实际上参数确实随时间变化,或者您的模型与实际过程不完全匹配,则这可能有助于更好地拟合模型并提高其性能。
科彻德2014年

1
除了您的文章外,我找不到关于ARIMA是通用通用逼近器的任何参考。你能指出我一个吗?
Skander H.

2
@Alex这是根据沃尔德分解定理得出的,例如,请参见phdeconomics.sssup.it/documents/Lesson11.pdf
Kochede,

1
我可以说状态空间模型具有更一般的形式,而ARIMA仅覆盖其中的一部分?
Vickyyy

3

感谢@IrishStat在评论中提出了几个非常好的问题,您的问题答案太长了,无法发布为评论,因此我将其作为答案发布(不幸的是,不是针对该主题的原始问题)。

问题是:“ 它是否可以清楚地识别时间趋势变化并报告趋势变化的时间点?是否可以区分参数变化和误差方差变化并对此进行报告?它是否可以检测并报告用户周围的特定超前和滞后效应指定的预测变量?可以在声明电​​平偏移/本地时间趋势之前指定一组中的最小数量的值吗?它可以区分功率变换的需要与误差方差发生变化的确定时间点吗?

  1. 确定趋势变化-是的,最自然的是,您可以将趋势斜率设置为状态变量之一,并且KF会连续估算当前斜率。然后,您可以决定哪种坡度变化对您来说足够大。另外,如果斜率在状态空间模型中不是随时间变化的,则可以以标准方式测试滤波过程中的残差,以查看模型何时出现断裂。
  2. 参数的变化和方差的变化区分-是的,方差可以的参数(州)之一,那么的参数很可能改变取决于你的模型的可能性,以及如何特别的数据已经改变。
  3. 检测超前/滞后关系-不确定这一点,您当然可以将任何滞后变量纳入状态空间模型;对于滞后的选择,您可以测试包含不同滞后的模型的残差,或者在简单情况下,只需在公式化模型之前使用互相关图即可。
  4. 指定观察值的阈值数目以决定趋势变化-是的,如在1)中一样,因为过滤是递归进行的,因此您不仅可以阈值斜率变化足够大,而且可以观察到#条信度以提高信心。但是更好-KF不仅会生成斜率的估计值,而且还会生成此估计值的置信带,因此,当斜率的置信度界限超过某个阈值时,您可以确定斜率发生了显着变化。
  5. 区分是否需要功率转换和需要更大的方差-不确定我是否理解正确,但是我认为您可以在滤波过程中测试残差,以查看残差是否仍然是正常的,且方差更大,或者它们存在一些偏差,因此您需要进行更改您的模型。更好-您可以将其设为模型的二进制切换状态,然后KF会根据似然性自动对其进行估算。在这种情况下,模型将是非线性的,因此您将需要UKF进行过滤。

1

当状态动态和测量误差遵循所谓的线性高斯假设(http://wp.me/p491t5-PS)时,卡尔曼滤波器是最优的线性二次估计器。因此,只要您了解动力学和测量模型并且它们遵循线性高斯假设,就不会在线性二次估计器中找到更好的估计器。但是,“失败的”卡尔曼滤波器应用程序的最常见原因是:

  1. 对状态动力学和测量模型的了解不正确/不正确。

  2. 过滤器的初始化不正确(提供的初始状态估计和协方差与真实的系统状态不一致)。使用加权最小二乘(WLS)初始化过程可以轻松克服这一问题。

  3. 纳入相对于系统动力学模型的统计“异常值”的度量。这可能导致卡尔曼增益具有负元素,这可能导致更新后产生非正半确定协方差矩阵。可以使用“选通”算法(例如椭圆形选通)来避免这种情况,以在用该测量更新卡尔曼滤波器之前验证该测量。

这些是我使用卡尔曼滤波器时看到的一些最常见的错误/问题。否则,如果模型的假设有效,则卡尔曼滤波器是最佳估计器。


1

您可以参阅出色的《贝叶斯预测和动力学模型》一书(Harrison和West,1997年)。作者表明,几乎所有传统时间序列模型都是通用动态模型的特例。他们还强调了优势。可能的主要优点之一就是您可以轻松地通过简单地增加状态向量来集成许多状态空间模型。例如,您可以将回归变量,季节因素和自回归成分无缝集成到单个模型中。


嗨,您能否详细说明“例如,您可以将回归变量,季节因素和自回归成分无缝集成到一个模型中”。如果我错了,请纠正我,这是否意味着对于ARIMA,您需要使时间序列固定,但是对于状态空间模型,您只需要调整状态变量的数量?
Vickyyy

@Vickyyy与ARIMA不同,状态空间模型不假定平稳性。您可以向其中添加许多组件,并在一个状态向量中表示它们。
Anselmo

1

我要补充一点,如果您直接使用State Space函数,则可能必须了解构成模型的几个矩阵,以及它们如何相互作用和工作。这比定义ARIMA模型更像是定义程序。如果您正在使用动态状态空间模型,它将变得更加复杂。

如果您使用的软件包具有非常好的状态空间功能,则可以避免其中的一些问题,但是R软件包中的绝大多数此类功能都要求您在某些时候进入细节。

在我看来,它与一般的贝叶斯统计数据很像,其机制比更频繁的功能需要更多的理解,关心和养护才能使用。

在这两种情况下,值得额外的细节/知识,但这可能是采用的障碍。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.