Stationarity and detrending (ADF/KPSS)¶

Stationarity tarkoittaa, että aikasarjan tilastolliset ominaisuudet eli keskiarvo, varianssi ja kovarianssi eivät muutu ajan myötä. Monet tilastolliset mallit edellyttävät, että sarjat ovat paikallaan, jotta voidaan tehdä tehokkaita ja tarkkoja ennusteita.

aikasarjoilla lisätyn Dickey Fullerin (”ADF”) testin ja Kwiatkowski – Phillips-Schmidt-Shinin (”KPSS”) testin stationaarisuuden tarkistamiseen käytettäisiin kahta tilastollista testiä. On myös käytettävä menetelmää, jolla ei-stationääriset aikasarjat muunnetaan stationaarisiksi sarjoiksi.

tämä ensimmäinen solu tuo standardipakkauksia ja asettaa sarjoja näkyviin riviin.

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

käytetään Sunspots-tietokokonaisuutta. Se sisältää vuosittain (1700-2008) tiedot auringonpilkuista National Geophysical Data Centeristä.

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

tietoja esikäsitellään jonkin verran. ”Vuosi” – saraketta käytetään indeksin luomisessa.

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

tiedot on nyt piirretty.

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

ADF-testiä¶

ADF-testiä käytetään määrittämään yksikköjuuren esiintyminen sarjassa, ja siten se auttaa ymmärtämään, onko sarja paikallaan vai ei. Tämän testin nollahypoteesi ja vaihtoehtoinen hypoteesi ovat:

nollahypoteesi: sarjalla on yksikköjuuri.

vaihtoehtoinen hypoteesi: sarjalla ei ole yksikköjuurta.

jos nollahypoteesia ei voida hylätä, tämä testi voi osoittaa, että sarja ei ole stationäärinen.

luodaan funktio, joka suorittaa ADF-testin aikasarjalla.

:
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-testi¶

KPSS on toinen testi aikasarjan stationaarisuuden tarkistamiseksi. KPSS-testin nollahypoteesi ja vaihtoehtoinen hypoteesi ovat vastakkaiset kuin ADF-testin.

nollahypoteesi: prosessi on trend stationäärinen.

vaihtoehtoinen hypoteesi: sarjalla on yksikköjuuri (sarja ei ole stationäärinen).

luodaan funktio KPSS-testin suorittamiseksi aikasarjalla.

:
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-testeissä saadaan seuraavat tulokset-testin tilastollinen arvo, p-arvo ja kriittinen arvo 1%: n, 5%: n ja 10%: n luottamusväleillä.

dataan sovelletaan nyt ADF-testiä.

:
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

0,05: n merkitsevyystason ja ADF-testin p-arvon perusteella nollahypoteesia ei voida hylätä. Näin ollen sarja on ei-stationäärinen.

KPSS – testit antavat seuraavat tulokset-testin tilastollinen arvo, p-arvo ja kriittinen arvo 1%: n, 5%: n ja 10%: n luottamusväleillä.

KPSS-testiä sovelletaan nyt aineistoon.

:
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

0,05: n merkitsevyystason ja kpss-testin p-arvon perusteella on näyttöä nollahypoteesin hylkäämisestä vaihtoehdon hyväksi. Näin ollen sarja on KPSS: n testin mukaan ei-stationäärinen.

on aina parempi soveltaa molempia testejä, jotta voidaan varmistaa, että sarja on todella paikallaan. Mahdolliset tulokset näiden stationaaristen testien soveltamisesta ovat seuraavat::

tapaus 1: Molemmat testit päättelevät, että sarja ei ole stationäärinen – sarja ei ole stationäärinen
Tapaus 2: molemmat testit päättelevät, että sarja on stationäärinen – sarja on stationäärinen
tapaus 3: KPSS ilmaisee stationaarisuutta ja ADF ei-stationaarisuutta – sarja on trend stationäärinen. Trend on poistettava, jotta sarja tiukka paikallaan. Detrended-sarja tarkistetaan stationaarisuuden varalta.
tapaus 4: KPSS ilmaisee ei-stationaarisuutta ja ADF osoittaa stationaarisuutta – sarja on ero stationaarinen. Differencing on tarkoitus käyttää tehdä sarja stationary. Eri sarjassa tarkistetaan stationaarisuus.

tässä voidaan ADF: n testin ja KPSS: n testin tulosten eron vuoksi päätellä, että sarja on trend stationäärinen eikä tiukka stationäärinen. Sarjaa voi karsia erilaistamalla tai malliasentamalla.

Detrending by Differencing¶

se on yksi yksinkertaisimmista menetelmistä aikasarjan detrendoimiseksi. Muodostetaan uusi sarja, jossa kulloisenkin aikavaiheen arvo lasketaan alkuperäisen havainnon ja edellisen aikavaiheen havainnon erotuksena.

aineistoon sovelletaan erittelyä ja tulos piirretään.

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

ADF-testiä sovelletaan nyt näihin heikentyneisiin arvoihin ja stationaarisuus tarkistetaan.

:
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

ADF-testin p-arvon perusteella on näyttöä nollahypoteesin hylkäämisestä vaihtoehdon hyväksi. Siksi sarja on nyt tiukasti paikallaan.

KPSS-testiä sovelletaan nyt näille heikentyneille arvoille ja stationaarisuus tarkistetaan.

:
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

KPSS-testin p-arvon perusteella nollahypoteesia ei voida hylätä. Näin ollen sarja on stationäärinen.

johtopäätös¶

aikasarjan stationaarisuuden tarkastamiseen käytetään kahta testiä, ADF-testiä ja KPSS-testiä. Detrending toteutetaan käyttämällä differencing. Trend stationäärinen aikasarja muunnetaan tiukaksi stationääriseksi aikasarjaksi. Vaadittavaa ennustemallia voidaan nyt soveltaa kiinteään aikasarjatietoon.

Vastaa

Sähköpostiosoitettasi ei julkaista.