我试图使用hmmlearn的GaussianHMM来拟合具有2个主要状态的隐马尔可夫模型,同时允许多个外生变量。我的目标是确定GDP增长的两种状态(一种低方差,另一种高方差(,然后这些状态取决于滞后失业率、滞后商业信心水平等。我有几个问题:
- 使用hmmlearn的GaussiansHMM,我已经通读了文档,但我找不到任何关于外生变量的提及。使用方法fit(X,lengths=None(,我看到X可以有n_features列,我是否正确理解我应该传入一个数组,第一列是内生变量(在我的情况下是GDP增长(,其余列是外生变量
- hmmlearn的GaussianHMM是否等效于statsmodels.tsa.regime_switching.markov_regression.MarkovRegression?该模型允许exog_tvtp,这意味着使用外生变量来计算时变转移概率矩阵
拟合S&P500,无外源性变量。
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())
想象一下,如果我想在S&P500,例如关于经济增长或过去的波动,有办法做到这一点吗?谢谢你的帮助。
n_features
可以被认为是时域,不应该与描述回归模型复杂性的特征混为一谈。
- 如果你的隐藏状态是GDP增长的两种状态,那么你试图从中推断隐藏状态的观测变量(或排放量(应该是特征空间(也称为
n_features
(
- 这应该是对您的";外生变量";,在时间内收集。
hmmlearn
将无法获取多变量排放
建议
- 如果我正确理解你的问题,也许你想要的是卡尔曼滤波器。KF基于多个测量(即所有外生变量(产生未知量的估计,最终产生比基于单个测量更准确的模型
- 如果你希望每个隐藏状态都有多个独立的发射,那么你可能想要的是一个结构化的感知器。这里讨论的是:多个观测变量的隐马尔可夫模型