【问题标题】:How to generate a state space model from data?如何从数据中生成状态空间模型?
【发布时间】:2021-10-24 18:53:44
【问题描述】:

我正在尝试使用 statsmodels 库从 Python 中的离散时间序列数据中识别状态空间模型:statsmodel.tsa.statespace.sarimax.SARIMAX

我需要状态空间一般形式的矩阵 (here the statsmodel reference):从 statsmodel 页面解释了这些矩阵,但不清楚如何推断它们。

例如,如果我想将卡尔曼滤波器应用于识别的模型(通过 sarimax),我需要这张图片中描述的矩阵state space matrices needed

statsmodel可以得到矩阵系数吗?

【问题讨论】:

  • 对我来说,这个问题不是很清楚。你到底在找什么?你已经尝试了什么?您能否发布一些示例代码,说明您无法弄清楚哪些部分?
  • 我正在创建一个适合数据 model = SARIMAX(Y_tr, exog = X_tr, order = (p,d,q), enforce_invertibility = False) best_model = model.fit() best_model.summary() 的 SARIMAX 模型,然后我想知道所谓的 best_model 的状态空间矩阵,以便构​​建 Kalman Filter .卡尔曼滤波器可以应用于由状态空间方程表示的模型,所以我想从 SARIMAX 模型 (best_model) 中推断出状态空间方程。我解释过自己吗?

标签: python statsmodels state-space sarimax


【解决方案1】:

所有状态空间系统矩阵都保存在拟合模型的filter_results 属性中。您在答案中包含的链接中给出了矩阵的名称(例如“设计”等)

例如:

model = SARIMAX(Y_tr, exog = X_tr, order = (p,d,q), enforce_invertibility = False)
best_model = model.fit()

print(best_model.filter_results.design)
print(best_model.filter_results.obs_cov)
# ...

【讨论】:

  • 感谢您的回答。你知道我在哪里可以找到一些关于 model.filter_results 的文档吗?在 [statsmodel API] (statsmodels.org/dev/generated/…) 我只能找到Kalman_filter.filter_results,这与 SARIMAX 模型无关。此外,我在哪里可以找到链接外生输入 (X_tr) 和输出 (Y_tr) 的矩阵?我期待矩阵 Z : design (k_endog×k_states×nobs) 的大小为 (k_exog×nobs)
  • 对于 SARIMAX,filter_results 属性是 FilterResults 类的一个实例,因此您可以查看类文档(链接)了解详细信息。
  • 设计矩阵Z是将未观察到的状态向量链接到输出(Y_tr)的矩阵。外生项都包含在obs_intercept 项中,但该项包含系数和外生变量的乘积。您似乎想要系数本身,这些系数可作为 best_model.params 的一部分获得。
  • 你好@cfulton,为什么我需要对已识别的 SARIMAX 模型应用卡尔曼滤波器来提取状态空间矩阵 Zt、dt、Tt、ct?我和 giulia 正在尝试让这些矩阵自己将识别的状态空间模型应用于其他数据。
  • 当你调用fit时,SARIMAX模型的参数是通过最大似然数值估计的,其中似然函数是在将卡尔曼滤波器应用于状态空间形式后使用预测误差分解评估的该模型。因此,当您创建best_model 时,您已经将卡尔曼滤波器的结果应用于与估计参数对应的状态空间模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2021-08-31
  • 2011-01-16
  • 2019-04-03
相关资源
最近更新 更多