You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python statsmodels库MarkovAutoregression初始化报错及正确用法咨询

报错原因

  1. initialize_known、initialize为MarkovAutoregression类的实例方法,仅可通过该类的实例对象调用,直接使用类名调用会触发缺少self参数的报错。
  2. initialize_known方法的probabilities参数要求传入长度等于状态数k_regimes的一维数组,代表初始时刻属于各个状态的概率,你传入的2×2数组为转移概率矩阵,不符合参数要求。

正确使用步骤

情况1:仅设置初始状态归属概率

如果只是要指定初始时刻属于各个状态的概率,按以下顺序编写代码:

# 1. 准备输入数据、实例化模型
residuals = bcox(ARCH['residuals'])
SWARCH_model = MarkovAutoregression(
    residuals,
    k_regimes=2,
    order=0,
    switching_ar=True,
    switching_variance=True,
    switching_exog=False
)

# 2. 用模型实例调用初始化方法,传入初始状态概率(示例为初始时刻80%概率属于状态0,20%属于状态1)
init_state_prob = np.array([0.8, 0.2])
SWARCH_model.initialize_known(probabilities=init_state_prob, tol=1e-08)

# 3. 拟合模型
SWARCH = SWARCH_model.fit()

情况2:同时自定义初始转移矩阵、AR系数、方差等全部参数

如果你预先通过HMM拟合得到了完整的初始参数(包括转移矩阵、各状态的方差、AR系数等),需要在调用fit方法时通过start_params参数传入,示例如下:

# 示例:2状态、order=0、切换方差和AR的场景,start_params结构参考
# 参数顺序:转移概率参数 → 各状态均值 → 各状态AR系数 → 各状态方差
init_trans_mat = np.array([[0.8, 0.2], [0.2, 0.8]])
# 转移矩阵转成statsmodels要求的非冗余参数形式:2状态下为[log(P00/P01), log(P11/P10)]
trans_params = np.log(init_trans_mat.diagonal() / init_trans_mat[:, ::-1].diagonal())
init_mean = np.array([0, 0]) # 两个状态的均值
init_ar_params = np.array([0.1, 0.3]) # 两个状态的AR系数
init_var = np.array([0.5, 1.2]) # 两个状态的方差
# 拼接完整初始参数
start_params = np.concatenate([trans_params, init_mean, init_ar_params, init_var])

# 实例化模型后拟合时传入初始参数
SWARCH_model = MarkovAutoregression(
    bcox(ARCH['residuals']),
    k_regimes=2,
    order=0,
    switching_ar=True,
    switching_variance=True,
    switching_exog=False
)
SWARCH = SWARCH_model.fit(start_params=start_params)

补充说明

initialize方法是用来设置初始状态概率的通用方法,支持的初始化策略包括'steady-state'(稳态概率)、'diffuse'(漫反射初始化)等,调用方式和initialize_known一致,都是先实例化模型再调用:

# 示例:用稳态概率作为初始概率
SWARCH_model.initialize('steady-state')

内容的提问来源于stack exchange,提问作者Angelo Manna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:30:05