def test_invalid(): # Tests that invalid options raise errors # (note that this is only invalid options specific to `ARIMA`, and not # invalid options that would raise errors in SARIMAXSpecification). endog = dta['infl'].iloc[:50] mod = ARIMA(endog, order=(1, 0, 0)) # Need valid method assert_raises(ValueError, mod.fit, method='not_a_method') # Can only use 'statespace' with fixed parameters with mod.fix_params({'ar.L1': 0.5}): assert_raises(ValueError, mod.fit, method='yule_walker') # Cannot override model-level values in fit assert_raises(ValueError, mod.fit, method='statespace', method_kwargs={ 'enforce_stationarity': False}) # start_params only valid for MLE methods assert_raises(ValueError, mod.fit, method='yule_walker', start_params=[0.5, 1.]) # has_exog and gls=False with non-statespace method mod2 = ARIMA(endog, order=(1, 0, 0), trend='c') assert_raises(ValueError, mod2.fit, method='yule_walker', gls=False) # non-stationary parameters mod3 = ARIMA(np.arange(100) * 1.0, order=(1, 0, 0), trend='n') assert_raises(ValueError, mod3.fit, method='hannan_rissanen') # non-invertible parameters mod3 = ARIMA(np.arange(20) * 1.0, order=(0, 0, 1), trend='n') assert_raises(ValueError, mod3.fit, method='hannan_rissanen')
def test_hannan_rissanen_with_fixed_params(ar_order, ma_order, fixed_params): # Test for basic uses of Hannan-Rissanen estimation with fixed parameters endog = dta['infl'].diff().iloc[1:101] desired_p, _ = hannan_rissanen(endog, ar_order=ar_order, ma_order=ma_order, demean=False, fixed_params=fixed_params) # no constant or trend (since constant or trend would imply GLS estimation) mod = ARIMA(endog, order=(ar_order, 0, ma_order), trend='n', enforce_stationarity=False, enforce_invertibility=False) with mod.fix_params(fixed_params): res = mod.fit(method='hannan_rissanen') assert_allclose(res.params, desired_p.params)
output['value']['Critical Value(10%)'] = t[4]['10%'] print(output) #这里ts1没有过,ADF检验,但是看时序图,较为平稳.有几个周期的方差较大怀疑是异方差 #做lm检验模型是显著的异方差,但是书中根据经验判断,适用arima模型. #那么臆测一下,异方差由于历史的几个周期导致,因为数据比较历史.并且周期少 #那么可以认为适用arima,解决之后开始绘制自相关图和偏自相关图 c = acorr_lm(data['ts1'].dropna()) print(c) # lag_acf = acf(data['ts1'].dropna(), nlags=10,fft=False) # lag_pacf = pacf(data['ts1'].dropna(), nlags=10, method='ols') # fig, axes = plt.subplots(1,2, figsize=(20,5)) # plot_acf(data['ts1'].dropna(), lags=10, ax=axes[0]) # plot_pacf(data['ts1'].dropna(), lags=10, ax=axes[1], method='ols') # plt.show(block=True) # 疏系数模型书中给出的是ARIMA((1,4),1,0) # 但是我在看貌似ARIMA((1,4),1,1)更好些 # order_trend=arma_order_select_ic(data['ts1'].dropna())#这里由于异方差,可能没给出最好结果 # print(order_trend['bic_min_order']) # python疏系数方法,对比了arima(4,1,0)和(4,1,1)后根据AIC和BIC使用(4,1,0)更好 result_trend = ARIMA(data['fertility'], order=(4, 1, 0), enforce_stationarity=False) with result_trend.fix_params({'ar.L2': 0, 'ar.L3': 0}): result_trend = result_trend.fit() print(result_trend.param_names) print(result_trend.forecast())
from statsmodels.tsa.arima.model import ARIMA from math import sqrt from scipy.stats import chi2 ibm = pd.read_csv('../data/m-ibm3dx2608.txt', delimiter='\s+') vw = ibm['vwrtn'] m3 = ARIMA(vw, order=(3, 0, 0)) res = m3.fit() print(res.summary()) print( f"intercept phi(0): {(res.polynomial_ar[0] + res.polynomial_ar[1] + res.polynomial_ar[2] + res.polynomial_ar[3]) * vw.mean()}") # standard error of residuals print(f"standard error of residuals: {sqrt(res.params['sigma2'])}") # box test print("Box-Ljung:") box = sm.stats.acorr_ljungbox(res.resid, lags=[12], return_df=True) pv = 1 - chi2.cdf(box['lb_stat'], 9) print(f"pv: {pv[0]}") m3 = ARIMA(vw, order=(3, 0, 0), enforce_stationarity=False) with m3.fix_params({'ar.L2': 0}): res = m3.fit() print(res.summary()) print( f"intercept phi(0): {(res.polynomial_ar[0] + res.polynomial_ar[1] + res.polynomial_ar[2] + res.polynomial_ar[3]) * vw.mean()}") print(f"standard error of residuals: {sqrt(res.params['sigma2'])}") print("Box-Ljung:") box = sm.stats.acorr_ljungbox(res.resid, lags=[12], return_df=True) print(box) pv = 1 - chi2.cdf(box['lb_stat'], 10) print(f"pv: {pv[0]}")