hmmlearn高斯HMM中的外生变量

问题描述

我正在尝试使用hmmlearn的GaussianHMM来拟合具有2个主要状态的隐马尔可夫模型,同时允许多个外生变量。我的目标是确定GDP增长的两个状态(一个具有低方差,另一个具有高方差),然后这些状态取决于滞后的失业率,滞后的商业信心水平等。我有两个问题:

  1. 使用hmmlearn的GaussiansHMM,我已阅读了文档,但找不到任何有关外生变量的内容。使用fit(X,lengths = None)方法,我看到X可以有n_features列,我是否正确理解我应该传入一个数组,其中第一列为内生变量(本例中为GDP增长),其余为的列是外生变量?
  2. hmmlearn的GaussianHMM是否等于statsmodels.tsa.regime_switching.markov_regression.MarkovRegression?该模型允许使用exog_tvtp,这意味着将使用外生变量来计算随时间变化的转移概率矩阵。

一个适合标准普尔500指数月度收益的示例,没有外部变量。

import numpy as np
import pandas as pd
from hmmlearn.hmm import GaussianHMM
import yfinance as yf
sp500 = yf.download("^GSPC")["Adj Close"]

# Fitting an absolute return model because we only care about volatility #
rets = np.log(sp500/sp500.shift(1)).dropna()
rets.index = pd.to_datetime(rets.index)
rets = rets.resample("M").sum()
model = GaussianHMM(n_components=2)
model.fit(rets.to_frame())
state_sequence = model.predict(rets.to_frame())

想象一下,如果我想对标准普尔500指数的收益增加对外部变量的依赖,例如对经济增长或过去的动荡,是否有办法做到这一点? 感谢您的帮助。

解决方法

n_features可以被视为时域,不应与描述ie复杂度的特征相混淆。回归模型。

  1. 如果您的隐藏状态是GDP增长的两个状态,那么您试图从中推断出这些隐藏状态的观察变量(或排放量)应该是特征空间(aka n_features)。
  • 这应该是单一测量(排放),描述在时间内收集的“外生变量”的组合。 hmmlearn将无法进行多变量排放。

建议

  • 如果我正确理解了您的问题,也许您正在寻找的是卡尔曼滤波器。 KF根据多次测量(即您的所有外生变量)得出未知数的估计值,最终得出的模型比基于一次测量的模型更为准确。
  • 如果您希望每个隐藏状态都具有多个 independent 发射,那么您可能正在寻找的是结构化的感知器。此处讨论:Hidden Markov Model for multiple observed variables