In diesem Artikel beschreiben wir, wie bestimmte Zeitreihendaten mithilfe von Python an das AR-Modell, das AM-Modell und das ARMA-Modell angepasst werden.
Die Funktion statsmodels.tsa.arima_model.ARMA.fit wird verwendet. Klicken Sie hier für Details (https://www.statsmodels.org/devel/generated/statsmodels.tsa.arima_model.ARMA.fit.html#statsmodels.tsa.arima_model.ARMA.fit)
Als Beispiel passen wir das AR (1) -Modell an.
y_t = 1 + 0.5 y_{t-1} + \epsilon_t
$ \ Epsilon_t $ ist jedoch das normale weiße Rauschen mit Dispersion 1. Setzen Sie außerdem $ y_0 = 2 $.
#Ein magischer Zauber, der die Erfassung von Modulen und Grafiken gut aussehen lässt
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline
import numpy as np
import statsmodels.api as sm
import statsmodels.tsa.api as smt
p = print
#Erstellen einer Datenspalte zum Plotten
#Erfassen Sie diesmal 1000-mal Daten
y = np.zeros(1000)
np.random.seed(42)
epsilon = np.random.standard_normal(1000)
y[0] = 2
for t in range(1,1000):
y[t] = 1 + 0.5 * y[t-1] + epsilon[t]
#Schauen Sie sich die zu zeichnenden Zeitreihendaten an
plt.plot(y)
plt.xlabel('time')
plt.ylabel('value')
plt.title('time-value plot');
Das folgende Diagramm ist dargestellt.
Passen Sie dieses Modell.
mdl = smt.ARMA(y, order=(1, 0)).fit()
p(mdl.summary())
Das Ergebnis ist wie folgt. Es ist ersichtlich, dass der konstante Term 2,0336 beträgt und der Koeffizient des AR-Modells 0,4930 beträgt, was nahe am tatsächlichen Wert von 2,0,5 liegt. Darüber hinaus war dieses Modell ein AR-Modell, das den konstanten Term 2 enthielt. Wenn jedoch bekannt ist, dass der konstante Term 0 ist,
mdl = smt.ARMA(y, order=(1, 0)).fit(trend='nc')
Und es ist ausreichend.
Alles was Sie tun müssen, ist die Nummer in der Reihenfolge =, Teil zu ändern. Zum Beispiel bei der Anpassung an MA (1),
mdl = smt.ARMA(y, order=(0, 1)).fit()
Und es ist ausreichend
Bei Montage an ARMA (1, 1)
mdl = smt.ARMA(y, order=(1, 1)).fit()
Und es ist ausreichend
Mit der Funktion sm.tsa.arma_order_select_ic kann die optimale Reihenfolge anhand der Informationsmenge geschätzt werden. Klicken Sie hier für Details zur Funktion (https://www.statsmodels.org/stable/generated/statsmodels.tsa.stattools.arma_order_select_ic.html).
Die Reihenfolge wird unter Verwendung der Zeitreihendaten des oben beschriebenen AR (1) -Modellmodells geschätzt. Mit anderen Worten, wenn Sie schätzen können, dass die Bestellung (1,0) ist, sind Sie erfolgreich.
from statsmodels.tsa.arima_process import arma_generate_sample
y = np.zeros(1000)
np.random.seed(42)
epsilon = np.random.standard_normal(1000)
y[0] = 2
for t in range(1,1000):
y[t] = 1 + 0.5 * y[t-1] + epsilon[t]
sm.tsa.arma_order_select_ic(y)
Das Ergebnis ist wie folgt.
Die Reihenfolge (1,0) wurde optimal geschätzt. Die Matrix repräsentiert den Wert von BIC Die Zeilen repräsentieren die AR-Reihenfolge und die Spalten repräsentieren die AM-Reihenfolge.
Wenn Sie AIC verwenden möchten oder wenn Sie sowohl mit AIC als auch mit BIC auswerten möchten, beschreiben Sie Folgendes.
#Bei Verwendung von AIC
sm.tsa.arma_order_select_ic(y, ic='aic')
#Wenn Sie gleichzeitig anhand von zwei Informationsmengenstandards bewerten möchten
sm.tsa.arma_order_select_ic(y, ic=['aic', 'bic'])
Es ist auch möglich, durch Ändern des Maximalwerts der Bestellung eine Vermessung durchzuführen oder zu schätzen, nachdem angenommen wurde, dass der konstante Term = 0 ist.
Recommended Posts