makystats GitHub PyPI FR · EN

ARMA / ARIMA / SARIMA

Estimation MLE d’un ARMA, ARIMA ou SARIMA sans GARCH : un seul paramètre de variance σ².

L’index temporel de y (DatetimeIndex, PeriodIndex, …) est préservé sur résidus, fitted values et prévisions. Si d ou D > 0, des NaN apparaissent en tête (alignement sur l’échantillon complet).

README source : makystats/arma/README.md

Import

from makystats import arma, arima, sarima, select_arma_order

ARMA (stationnaire, d=0)

res = arma(y, mean="ARMA", ar=1, ma=1, trend="c").fit()
print(res.coef_table)
print(res.params["AR(1)"])
print(res.bse, res.pvalues)
print(res.cov_params())
print(res.forecast(steps=5, conf_int=True))

ARIMA (niveaux, souvent I(1))

L’utilisateur n’a pas à différencier à la main :

res = arma(prices, mean="ARMA", ar=1, ma=1, d=1, trend="c").fit()
res = arima(prices, order=(1, 1, 1), trend="c").fit()
res.forecast(steps=10)                # niveaux (défaut si d>0)
res.forecast(steps=10, levels=False)  # sur Δy
res.fitted_values_level()
dRôle
0ARMA sur y
1ARIMA sur niveaux non stationnaires
2Double différenciation (rare)

Sur Δy, trend='c' = dérive en niveau.

SARIMA

res = arma(ylog, mean="ARMA", ar=0, ma=1, d=1,
           seasonal_order=(0, 1, 1, 12), trend="n").fit()
res = sarima(ylog, order=(0, 1, 1), seasonal_order=(0, 1, 1, 12), trend="n").fit()
res = arma(ylog, mean="ARMA", ar=[4], ma=1, d=1,
           seasonal_order=(1, 1, 1, 12), trend="c").fit()
seasonal_order(P, D, Q, s)
P, QAR / MA saisonniers
Ddifférences saisonnières
spériode (12, 4, …)

Récupération des résultats

Attribut / méthodeContenu
params, coef, coefficientsSeries des coefficients nommés
bse, se, pvalues, tvaluesInférence
coef_tableCoeff / SE / z / Prob. / IC
cov_params()Covariance k×k
conf_int(alpha=0.05)IC des coefficients
aic, bic, hqic, llfCritères
residuals, fitted_valuesSéries indexées
arparams, maparamsSous-ensembles AR/MA
arroots, marootsRacines (|r| > 1 souhaité)
sigma2Variance innovatrice

Diagnostics

res.test_serial_correlation(lags=10)
res.test_heteroskedasticity(lags=5)
res.test_normality()
res.plot_diagnostics()

Sélection d’ordres

tab = select_arma_order(y, p_range=range(0, 4), q_range=range(0, 3), criterion="bic")
tab = select_arma_order(prices, d=1, p_range=range(0, 3), q_range=range(0, 2))
tab = select_arma_order(ylog, d=1, seasonal_order=(0, 1, 1, 12),
                        p_range=range(0, 3), q_range=range(0, 2), criterion="aic")

d et seasonal_order sont fixes pour toute la grille ; seuls p et q varient.

IC de prévision en niveau pour d>0 : approximation indicative. SARIMA dense → SARIMAX multiplicatif ; ARMA « troué » + saison → lags saisonniers additifs.