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

如何在statsmodels中实现仅保留p=96与q=96非零系数的ARIMAX模型?

解决ARIMAX模型仅保留96阶滞后系数的问题

首先,咱们来拆解你遇到的错误:你把p=[96]和q=[96]直接放进order元组里,但statsmodels的ARIMA类中,order参数的三个元素要求是整数类型的(k_ar, d, k_ma)——其中k_ar是AR项的最大滞后阶数,k_ma是MA项的最大滞后阶数。当你传入列表时,代码里的sum(order)会尝试把列表和整数相加,自然就抛出TypeError了。

要实现「仅保留96阶AR和MA系数,其余滞后阶数系数为0」的需求,你需要用到ARIMA类的ar_lags和ma_lags参数,而不是把列表塞进order里。具体做法如下:

修正后的代码示例

from statsmodels.tsa.arima.model import ARIMA

# 最大滞后阶数设为96,然后指定只保留96阶的滞后项
d = 0
# order的第一个元素是最大AR阶数,第三个是最大MA阶数,都设为96
order_tuple = (96, d, 96)

for i in range(start, len(df_series) + 1 - 96):
    endog = df_series.iloc[0:i-1, :]['1']
    exog = df_series.iloc[0:i-1, :]['temp']
    # 用ar_lags和ma_lags指定仅估计96阶的系数,其余滞后项系数约束为0
    arimax_model = ARIMA(
        endog.values,
        exog=exog.values,
        order=order_tuple,
        ar_lags=[96],
        ma_lags=[96]
    )
    arimax_fit = arimax_model.fit()
    # 后续可以查看拟合结果,比如arimax_fit.params会只显示96阶的AR、MA系数和外生变量系数

原理说明

  • order=(96,0,96)告诉模型,我们考虑的最大AR和MA滞后阶数都是96;
  • ar_lags=[96]指定仅对96阶的AR滞后项估计系数,所有小于96阶的AR滞后项系数会被强制设为0;
  • ma_lags=[96]同理,仅对96阶的MA滞后项估计系数,其余MA滞后项系数为0。

这样就完全符合你想要的约束条件了。另外,你提到pyflux不支持这种零约束设置,而statsmodels的这个方案是官方支持的,稳定性和可解释性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:42:45