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

如何在Statsmodels中使用自定义误差进行SARIMAX模拟?

解决SARIMAX自定义误差模拟多路径的问题

问题根源

SARIMAX的simulate方法对measurement_shocks和state_shocks的维度要求与ETSModel不同:当指定repetitions时,冲击数组的形状需要是(repetitions, nsimulations),而非你当前的(20,1000)(即(nsimulations, repetitions))。同时,若要完全控制误差来源,需显式固定state_shocks为0,避免状态更新的随机干扰。

解决方案步骤

  1. 调整自定义误差的维度:将你的(20,1000)误差数组转置为(1000,20),匹配repetitions×nsimulations的要求。
  2. 固定状态冲击为0:设置state_shocks=0,确保状态更新过程无随机误差,仅使用自定义的测量误差生成路径。
  3. 调用simulate方法:传入调整后的参数,即可生成1000条使用自定义误差的模拟路径。

修改后的代码示例

from statsmodels.tsa.statespace.sarimax import SARIMAX
import numpy as np

# 假设你已拟合好model,且自定义误差数组为custom_errors(形状(20,1000))
custom_errors = np.random.normal(0, 1, (20, 1000))  # 示例误差数组

# 转置误差数组为(repetitions, nsimulations)
adjusted_errors = custom_errors.T  # 形状变为(1000,20)

# 获取初始状态
initial = model.predicted_state[:, -1]

# 执行模拟:固定state_shocks为0,传入调整后的测量误差
simulation = model.simulate(
    nsimulations=20,
    anchor='end',
    repetitions=1000,
    initial_state=initial,
    measurement_shocks=adjusted_errors,
    state_shocks=0
)

结果验证

模拟结果的每条路径(simulation[:, :, i]对应第i条路径)应等于模型的预测均值(model.get_forecast(steps=20).predicted_mean)加上对应的自定义误差(custom_errors[:, i]),因为状态更新无随机干扰,仅测量环节加入了你指定的误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:09