sm.tsa.arma_order_select_ic参数
时间: 2023-05-28 20:06:55 浏览: 1282
sm.tsa.arma_order_select_ic函数的参数如下:
- data:时间序列数据,必需。
- max_ar:AR模型的最大阶数,可选,默认值为6。
- max_ma:MA模型的最大阶数,可选,默认值为4。
- ic:信息准则,可选,默认为'AIC'。可选值有'AIC'、'BIC'、'HQIC'等。
函数返回值为一个元组,包含AR和MA模型的最佳阶数。
相关问题
train_results = sm.tsa.arma_order_select_ic(data, ic=['aic', 'bic'], trend='nc', max_ar=6, max_ma=6)是什么意思
这行代码是使用 statsmodels 库中的 tsa 模块进行时间序列模型的阶数选择。具体来说,它使用信息准则(AIC、BIC)来评估给定数据的 ARMA 模型的不同阶数(AR 阶数和 MA 阶数)的拟合效果,以确定最佳的 ARMA 模型阶数。其中:
- data:待拟合的时间序列数据;
- ic:信息准则,包括 AIC 和 BIC,用于评估模型拟合效果;
- trend:趋势项,指定为 'nc' 表示不使用常数项;
- max_ar 和 max_ma:AR 阶数和 MA 阶数的最大值。
该函数返回一个包含 AIC 和 BIC 的字典,以及每个阶数下的信息准则值。例如,train_results.aic_min_order 和 train_results.bic_min_order 分别是 AIC 和 BIC 下的最优阶数。
sales = list(np.diff(data["#Passengers"])) data2 = { "Month":data1.index[1:], #1月1日是空值,从1月2号开始取 "#Passengers":sales } df = pd.DataFrame(data2) df['Month'] = pd.to_datetime(df['Month']) #df[''date]数据类型为“object”,通过pd.to_datetime将该列数据转换为时间类型,即datetime。 data_diff = df.set_index(['Month'], drop=True) #将日期设置为索引 data_diff.head() print(data_diff) fig = plt.figure(figsize=(12,8)) ax1=fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(data_diff,lags=20,ax=ax1) ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(data_diff,lags=20,ax=ax2) plt.show() # 为了控制计算量,我们限制AR最大阶不超过6,MA最大阶不超过4。 sm.tsa.arma_order_select_ic(data_diff,max_ar=100,max_ma=4,ic='aic')['aic_min_order'] # AIC ''' #对模型进行定阶 pmax = int(len(df) / 10) #一般阶数不超过 length /10 qmax = int(len(df) / 10) bic_matrix = [] for p in range(pmax +1): temp= [] for q in range(qmax+1): try: temp.append(ARIMA(data, (p, 1, q)).fit().bic) except: temp.append(None) bic_matrix.append(temp) bic_matrix = pd.DataFrame(bic_matrix) #将其转换成Dataframe 数据结构 p,q = bic_matrix.stack().idxmin() #先使用stack 展平, 然后使用 idxmin 找出最小值的位置 print(u'BIC 最小的p值 和 q 值:%s,%s' %(p,q)) # BIC 最小的p值 和 q 值:0,1 #所以可以建立ARIMA 模型,ARIMA(0,1,1) ''' model = ARIMA(data, (0,1,1)).fit() #model.summary2() predictions_ARIMA_diff = pd.Series(model.fittedvalues, copy=True) print("========") print(predictions_ARIMA_diff.head()) exit() plt.figure(figsize=(10, 6)) plt.plot(predictions_ARIMA_diff,label="forecast_diff") plt.plot(data_diff,label="diff") plt.xlabel('日期',fontsize=12,verticalalignment='top') plt.ylabel('销量差分',fontsize=14,horizontalalignment='center') plt.legend() plt.show()
这段代码首先计算了原始数据的一阶差分,并将差分后的销量数据存储在一个名为"sales"的列表中。然后,根据差分后的销量数据创建了一个新的DataFrame,并将日期列转换为Datetime格式。接下来,将日期列设置为索引,并打印出数据的前几行。
然后,代码绘制了差分后销量数据的自相关性(ACF)和偏自相关性(PACF)图。图形显示了滞后项与自相关系数/偏自相关系数之间的关系。
接下来,代码使用ARMA模型的AIC准则进行了模型定阶。限制了AR最大阶不超过6,MA最大阶不超过4。
然后,代码建立了ARIMA(0,1,1)模型,并使用该模型对差分后的数据进行了拟合。拟合后得到的值存储在predictions_ARIMA_diff中,并打印出前几行。
最后,代码绘制了拟合值和差分后数据的图形,并使用exit()函数退出程序。
阅读全文