Stasjonaritet betyr at de statistiske egenskapene til en tidsserie dvs. gjennomsnitt, varians og kovarians ikke endres over tid. Mange statistiske modeller krever at serien er stasjonær for å gjøre effektive og presise spådommer.
To statistiske tester vil bli brukt til å sjekke stasjonariteten til En Tidsserie – Forstørret Dickey Fuller («ADF») test og Kwiatkowski-Phillips-Schmidt-Shin («KPSS») test. En metode for å konvertere en ikke-stasjonær tidsserie til stasjonære serier skal også benyttes.
denne første cellen importerer standardpakker og angir at tomter skal vises inline.
:
%matplotlib inlineimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport statsmodels.api as sm
Sunspots datasett brukes. Den inneholder årlige (1700-2008) data om solflekker fra National Geophysical Data Center.
:
sunspots = sm.datasets.sunspots.load_pandas().data
Noen forbehandling utføres på dataene. Kolonnen» ÅR » brukes til å lage indeks.
:
sunspots.index = pd.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))del sunspots
dataene er tegnet nå.
:
sunspots.plot(figsize=(12,8))
:
<AxesSubplot:>
adf test¶
ADF test brukes til å bestemme tilstedeværelsen av enhetsrot i serien, og hjelper dermed med å forstå om serien er stasjonær eller ikke. Null-og alternativhypotesen til denne testen er:
Nullhypotesen: serien har en enhetsrot.
Alternativ Hypotese: serien har ingen enhetsrot.
hvis nullhypotesen i ikke ble avvist, kan denne testen gi bevis på at serien er ikke-stasjonær.
det Opprettes en funksjon for å utføre ADF-testen på en tidsserie.
:
from statsmodels.tsa.stattools import adfullerdef adf_test(timeseries): print ('Results of Dickey-Fuller Test:') dftest = adfuller(timeseries, autolag='AIC') dfoutput = pd.Series(dftest, index=) for key,value in dftest.items(): dfoutput = value print (dfoutput)
kpss test¶
KPSS er en annen test for å sjekke stasjonariteten til en tidsserie. Null-og alternativhypotesen for kpss-testen er motsatt AV ADF-testen.
Nullhypotesen: prosessen er trend stasjonær.
Alternativ Hypotese: serien har en enhetsrot (serien er ikke stasjonær).
en funksjon er opprettet for å utføre kpss-testen på en tidsserie.
:
from statsmodels.tsa.stattools import kpssdef kpss_test(timeseries): print ('Results of KPSS Test:') kpsstest = kpss(timeseries, regression='c', nlags="auto") kpss_output = pd.Series(kpsstest, index=) for key,value in kpsstest.items(): kpss_output = value print (kpss_output)
ADF-testene gir følgende resultater-teststatistikk, p-verdi og kritisk verdi ved 1%, 5% og 10% konfidensintervall.
ADF-test brukes nå på dataene.
:
adf_test(sunspots)
Results of Dickey-Fuller Test:Test Statistic -2.837781p-value 0.053076#Lags Used 8.000000Number of Observations Used 300.000000Critical Value (1%) -3.452337Critical Value (5%) -2.871223Critical Value (10%) -2.571929dtype: float64
basert på signifikansnivået på 0,05 og p-verdien AV ADF-testen, kan nullhypotesen ikke avvises. Derfor er serien ikke-stasjonær.
kpss-testene gir følgende resultater-teststatistikk, p-verdi og kritisk verdi ved 1%, 5% og 10% konfidensintervall.
kpss test er nå brukt på dataene.
:
kpss_test(sunspots)
Results of KPSS Test:Test Statistic 0.669866p-value 0.016285Lags Used 7.000000Critical Value (10%) 0.347000Critical Value (5%) 0.463000Critical Value (2.5%) 0.574000Critical Value (1%) 0.739000dtype: float64
basert på signifikansnivået på 0,05 og p-verdien AV kpss-testen, er det bevis for å avvise nullhypotesen til fordel for alternativet. Derfor er serien ikke-stasjonær i HENHOLD TIL KPSS-testen.
det er alltid bedre å bruke begge testene, slik at det kan sikres at serien er virkelig stasjonær. Mulige utfall av å anvende disse stasjonære testene er som følger:
Her, på grunn av forskjellen i resultatene FRA ADF test og KPSS test, kan det utledes at serien er trend stasjonær og ikke streng stasjonær. Serien kan detrended av differencing eller ved modellmontering.
Detrending ved Differencing¶
det er en av de enkleste metodene for å detrende en tidsserie. En ny serie er konstruert der verdien på gjeldende tidstrinn beregnes som forskjellen mellom den opprinnelige observasjonen og observasjonen ved forrige tidstrinn.
Differencing brukes på dataene og resultatet er plottet.
:
sunspots = sunspots - sunspots.shift(1)sunspots.dropna().plot(figsize=(12,8))
:
<AxesSubplot:>
ADF test er nå brukt på disse detrended verdier og stasjonaritet er sjekket.
:
adf_test(sunspots.dropna())
Results of Dickey-Fuller Test:Test Statistic -1.486166e+01p-value 1.715552e-27#Lags Used 7.000000e+00Number of Observations Used 3.000000e+02Critical Value (1%) -3.452337e+00Critical Value (5%) -2.871223e+00Critical Value (10%) -2.571929e+00dtype: float64
Basert på p-verdien AV ADF-testen, er det bevis for å avvise nullhypotesen til fordel for alternativet. Derfor er serien streng stasjonær nå.
kpss test er nå brukt på disse detrended verdier og stasjonaritet er sjekket.
:
kpss_test(sunspots.dropna())
Results of KPSS Test:Test Statistic 0.021193p-value 0.100000Lags Used 0.000000Critical Value (10%) 0.347000Critical Value (5%) 0.463000Critical Value (2.5%) 0.574000Critical Value (1%) 0.739000dtype: float64
/home/travis/build/statsmodels/statsmodels/statsmodels/tsa/stattools.py:1911: InterpolationWarning: The test statistic is outside of the range of p-values available in thelook-up table. The actual p-value is greater than the p-value returned. warn_msg.format(direction="greater"), InterpolationWarning
basert på p-verdien AV kpss-testen, kan nullhypotesen ikke avvises. Derfor er serien stasjonær.
Konklusjon¶
Det brukes To tester for å kontrollere stasjonariteten til en tidsserie, NEMLIG ADF-test og KPSS-test. Detrending utføres ved å bruke differencing. Trend stasjonære tidsserier konverteres til strenge stasjonære tidsserier. Nødvendig prognosemodell kan nå brukes på en stasjonær tidsserie data.