statsmodels arma_generate_sample建模异常及ARIMA trend参数报错解决方案问询
问题修复方案
核心错误原因
- 代码存在拼写错误:生成ARMA序列时定义了
maparams变量,传入arma_generate_sample时误写为maparam,导致生成序列不符合预期 - ARIMA接口参数不匹配:statsmodels 0.12.2版本的
sm.tsa.ARIMA要求order参数为(p,d,q)三元组,你仅传入了两个元素;且该版本旧接口不支持trend参数,需调整接口调用方式 - AR参数设置错误:你要拟合的是AR(1)过程
yt = 0.33yt-1 + et,对应的AR多项式系数应为[1, -0.33],原代码设置的AR参数实际对应AR(2)过程,不符合你的需求
修复后代码
import numpy as np import statsmodels.api as sm from statsmodels.tsa.arima_process import arma_generate_sample def make_arma(nobs=250): # 生成AR(1)过程 yt = 0.33*yt-1 + et arparams = np.array([0.33]) maparams = np.array([0]) # 构造AR、MA多项式系数 arparams = np.r_[1, -arparams] maparams = np.r_[1, maparams] np.random.seed(2014) y = arma_generate_sample(arparams, maparams, nobs) # 拟合AR(1)模型,d=0,q=0,无趋势项,0.12.2版本使用ARMA接口更适配 model = sm.tsa.ARMA(y, (1,0)).fit(trend='n', disp=0) data = model.params return data data = make_arma(nobs=250) print(data)
可选适配方案
如果一定要用sm.tsa.ARIMA接口,可将模型调用部分替换为如下代码即可兼容0.12.2版本:
from statsmodels.tsa.arima.model import ARIMA model = ARIMA(y, order=(1,0,0), trend='n').fit()
内容的提问来源于stack exchange,提问作者moichitano
相关产品推荐
相关产品推荐

