Stationarity and detrending (ADF/KPSS) int

Stationarity înseamnă că proprietățile statistice ale unei serii de timp, adică media, varianța și covarianța nu se modifică în timp. Multe modele statistice necesită ca Seria să fie staționară pentru a face predicții eficiente și precise.

două teste statistice ar fi utilizate pentru a verifica staționaritatea unui test Dickey Fuller („ADF”) mărit în serii de timp și testul Kwiatkowski – Phillips-Schmidt-Shin („KPSS”). Se utilizează, de asemenea, o metodă de transformare a unei serii temporale nestaționare în serii staționare.

această primă celulă importă pachete standard și stabilește parcele să apară în linie.

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

se utilizează setul de date Sunspots. Conține date anuale (1700-2008) despre petele solare de la Centrul Național de date geofizice.

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

unele preprocesări se efectuează pe date. Coloana” an ” este utilizată în crearea indexului.

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

datele sunt reprezentate acum.

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

testul ADF

testul ADF este utilizat pentru a determina prezența rădăcinii unității în serie și, prin urmare, ajută la înțelegerea dacă seria este staționară sau nu. Ipoteza nulă și alternativă a acestui test sunt:

ipoteza nulă: seria are o rădăcină unitară.

ipoteză alternativă: seria nu are rădăcină unitară.

dacă ipoteza nulă din nu a reușit să fie respinsă, acest test poate furniza dovezi că seria nu este staționară.

o funcție este creată pentru a efectua testul ADF pe o serie de timp.

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

test KPSS

kpss este un alt test pentru verificarea staționarității unei serii de timp. Ipoteza nulă și alternativă pentru testul KPSS sunt opuse celei a testului ADF.

ipoteza nulă: procesul este tendință staționară.

ipoteză alternativă: seria are o rădăcină unitară (seria nu este staționară).

o funcție este creată pentru a efectua testul KPSS pe o serie de timp.

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

testele ADF oferă următoarele rezultate-statistica testului, valoarea p și valoarea critică la intervale de încredere de 1%, 5% și 10%.

testul ADF este acum aplicat pe date.

:
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

pe baza nivelului de semnificație de 0,05 și a valorii p a testului ADF, ipoteza nulă nu poate fi respinsă. Prin urmare, seria nu este staționară.

testele KPSS oferă următoarele rezultate – statistica testului, valoarea p și valoarea critică la intervale de încredere de 1%, 5% și 10%.

testul KPSS este acum aplicat pe date.

:
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

pe baza nivelului de semnificație de 0,05 și a valorii p a testului KPSS, există dovezi pentru respingerea ipotezei nule în favoarea alternativei. Prin urmare, seria este non-staționară conform testului KPSS.

este întotdeauna mai bine să se aplice ambele teste, astfel încât să se poată asigura că seria este cu adevărat staționară. Rezultatele posibile ale aplicării acestor teste staționare sunt următoarele:

cazul 1: Ambele teste concluzionează că seria nu este staționară – seria nu este staționară
Cazul 2: ambele teste concluzionează că seria este staționară – seria este staționară
Cazul 3: KPSS indică staționaritatea și ADF indică non-staționaritatea – seria este trend staționară. Tendința trebuie eliminată pentru a face seria strictă staționară. Seria detrended este verificată pentru staționaritate.
Cazul 4: KPSS indică non-staționaritatea și ADF indică staționaritatea – seria este diferența staționară. Diferențierea trebuie utilizată pentru a face seria staționară. Seria diferențiată este verificată pentru staționaritate.

aici, datorită diferenței dintre rezultatele testului ADF și testul KPSS, se poate deduce că seria este tendință staționară și nu strictă staționară. Seria poate fi diminuată prin diferențiere sau prin montarea modelului.

Detrending de Diferențiere¶

este una dintre cele mai simple metode pentru detrending o serie de timp. Se construiește o nouă serie în care valoarea la etapa de timp curentă este calculată ca diferența dintre observația inițială și observația la etapa de timp anterioară.

diferențierea se aplică datelor și rezultatul este reprezentat grafic.

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

testul ADF este acum aplicat pe aceste valori detrended și staționaritate este verificată.

:
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

pe baza valorii p a testului ADF, există dovezi pentru respingerea ipotezei nule în favoarea alternativei. Prin urmare, seria este strict staționară acum.

testul KPSS este acum aplicat pe aceste valori detrended și staționaritatea este verificată.

:
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

pe baza valorii p a testului KPSS, ipoteza nulă nu poate fi respinsă. Prin urmare, seria este staționară.

concluzie

se utilizează două teste pentru verificarea staționarității unei serii de timp, și anume testul ADF și testul KPSS. Detrending se realizează prin utilizarea diferențiere. Seria de timp staționară Trend este transformată în serii de timp staționare stricte. Modelul de prognoză necesară poate fi acum aplicat pe o serie de date staționare de timp.

Lasă un răspuns

Adresa ta de email nu va fi publicată.