如何在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
相关产品推荐
相关产品推荐

