Ejemplo n.º 1
0
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')
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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]}")