stationariteit en detrending (ADF/KPSS)¶

stationariteit betekent dat de statistische eigenschappen van een tijdreeks, d.w.z. gemiddelde, variantie en covariantie, niet veranderen in de tijd. Veel statistische modellen vereisen dat de reeksen stationair zijn om effectieve en nauwkeurige voorspellingen te maken.

twee statistische tests zouden worden gebruikt om de stationariteit van een tijdreeks – Augmented Dickey Fuller (“ADF”) test en Kwiatkowski-Phillips-Schmidt-Shin (“KPSS”) test te controleren. Er moet ook een methode worden gebruikt om een niet-stationaire tijdreeks om te zetten in stationaire reeksen.

deze eerste cel importeert standaardpakketten en stelt plots in om inline te verschijnen.

:
%matplotlib inlineimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport statsmodels.api as sm

Sunspots dataset wordt gebruikt. Het bevat jaarlijks (1700-2008) gegevens over zonnevlekken van het National Geofysical Data Center.

:
sunspots = sm.datasets.sunspots.load_pandas().data

op de gegevens wordt enige voorbewerking uitgevoerd. De kolom “jaar” wordt gebruikt bij het maken van index.

:
sunspots.index = pd.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))del sunspots

de gegevens zijn nu uitgezet.

:
sunspots.plot(figsize=(12,8))
:
<AxesSubplot:>
../../../ _images / examples_notebooks_generated_stationarity_detrending_adf_kpss_8_1.png

de ADF-test¶

de ADF-test wordt gebruikt om de aanwezigheid van eenheidswortel in de reeks te bepalen, en helpt daarom bij het begrijpen of de reeks stationair is of niet. De nulhypothese en de alternatieve hypothese van deze test zijn:

nulhypothese: de reeks heeft een eenheidswortel.

alternatieve hypothese: de reeks heeft geen eenheidswortel.

indien de nulhypothese in niet is afgewezen, kan deze test aantonen dat de reeks niet-statisch is.

een functie wordt gemaakt om de ADF-test uit te voeren op een tijdreeks.

:
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 is een andere test voor het controleren van de stationariteit van een tijdreeks. De nul-en alternatieve hypothese voor de KPSS-test zijn tegengesteld aan die van de ADF-test.

nulhypothese: het proces is trendstationair.

alternatieve hypothese: de reeks heeft een eenheidswortel (de reeks is niet stilstaand).

een functie wordt gemaakt om de KPSS-test uit te voeren op een tijdreeks.

:
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)

de ADF-tests geven de volgende resultaten: teststatistiek, p-waarde en de kritische waarde bij 1% -, 5% – en 10% – betrouwbaarheidsintervallen.

de ADF-test wordt nu op de gegevens toegepast.

:
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

gebaseerd op het significantieniveau van 0,05 en de p-waarde van de ADF-test, kan de nulhypothese niet worden afgewezen. Daarom is de serie niet-stationaire.

de KPSS-tests geven de volgende resultaten: teststatistiek, p-waarde en de kritische waarde met een betrouwbaarheidsinterval van 1%, 5% en 10%.

de KPSS-test wordt nu toegepast op de gegevens.

:
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

gebaseerd op het significantieniveau van 0,05 en de p-waarde van de KPSS-test, is er bewijs voor het afwijzen van de nulhypothese ten gunste van het alternatief. Daarom is de serie niet-stationaire volgens de KPSS-test.

het is altijd beter beide tests toe te passen, zodat kan worden gegarandeerd dat de serie echt stilstaat. Mogelijke resultaten van de toepassing van deze stationaire tests zijn als volgt:

geval 1: Beide tests concluderen dat de serie niet stilstaat – de serie niet stilstaat
geval 2: beide tests concluderen dat de serie stilstaat – de serie stilstaat
geval 3: KPSS geeft stationariteit aan en ADF geeft niet-stationariteit aan – de serie trendstationariteit. Trend moet worden verwijderd om serie strikt stationair te maken. De detrended serie wordt gecontroleerd op stationariteit.
geval 4: KPSS geeft niet-stationariteit aan en ADF geeft stationariteit aan – de reeks is verschil stationair. Differencing moet worden gebruikt om serie stationair te maken. De verschillende serie wordt gecontroleerd op stationariteit.

door het verschil in de resultaten van de ADF-test en de KPSS-test kan worden afgeleid dat de serie trendstillig is en niet strikt stationaire. De serie kan worden detrended door differencing of door model montage.

Detrending door differentiëring¶

het is een van de eenvoudigste methoden voor detrending van een tijdreeks. Een nieuwe reeks wordt geconstrueerd waarbij de waarde in de huidige tijdstap wordt berekend als het verschil tussen de oorspronkelijke waarneming en de waarneming in de vorige tijdstap.

differentiëring wordt toegepast op de gegevens en het resultaat wordt uitgezet.

:
sunspots = sunspots - sunspots.shift(1)sunspots.dropna().plot(figsize=(12,8))
:
<AxesSubplot:>
../../../ _images / examples_notebooks_generated_stationarity_detrending_adf_kpss_20_1.png

ADF-test wordt nu toegepast op deze detrended waarden en stationariteit wordt gecontroleerd.

:
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

gebaseerd op de p-waarde van ADF-test, is er bewijs voor het afwijzen van de nulhypothese ten gunste van het alternatief. Daarom is de serie nu strikt stilstaand.

de KPSS-test wordt nu toegepast op deze detrended-waarden en de stationariteit wordt gecontroleerd.

:
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

gebaseerd op de p-waarde van de KPSS-test, kan de nulhypothese niet worden afgewezen. Vandaar dat de serie stilstaat.

conclusie¶

Er worden twee tests gebruikt om de stationariteit van een tijdreeks te controleren, namelijk de ADF-test en de KPSS-test. Detrending wordt uitgevoerd met behulp van differencing. Trend stationaire tijdreeksen wordt omgezet in strikte stationaire tijdreeksen. Vereist voorspellingsmodel kan nu worden toegepast op stationaire tijdreeksgegevens.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.