Stationäritet innebär att de statistiska egenskaperna hos en tidsserie, dvs. medelvärde, varians och kovarians, inte förändras över tiden. Många statistiska modeller kräver att serien är stillastående för att göra effektiva och exakta förutsägelser.
två statistiska tester skulle användas för att kontrollera stationariteten hos ett tidsserieförstärkt Dickey Fuller (”ADF”) test och Kwiatkowski – Phillips-Schmidt-Shin (”KPSS”) test. En metod för att omvandla en icke-stationär tidsserie till stationära serier ska också användas.
den här första cellen importerar standardpaket och ställer in tomter som ska visas inline.
:
%matplotlib inlineimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport statsmodels.api as sm
Sunspots dataset används. Den innehåller årliga (1700-2008) data om solfläckar från National Geophysical Data Center.
:
sunspots = sm.datasets.sunspots.load_pandas().data
viss förbehandling utförs på data. Kolumnen ” år ” används för att skapa index.
:
sunspots.index = pd.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))del sunspots
uppgifterna är ritade nu.
:
sunspots.plot(figsize=(12,8))
:
<AxesSubplot:>
ADF-test
ADF-test används för att bestämma närvaron av enhet rot i serien, och därmed hjälper till att förstå om serien är stillastående eller inte. Noll-och alternativhypotesen för detta test är:
nollhypotes: serien har en enhetsrot.
alternativ hypotes: serien har ingen enhetsrot.
om nollhypotesen i misslyckades att avvisas kan detta test ge bevis för att serien inte är stationär.
en funktion skapas för att utföra ADF-testet 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 2163>
kpss är ett annat test för att kontrollera stationariteten i en tidsserie. Null-och alternativhypotesen för KPSS-testet är motsatta ADF-testet.
nollhypotes: processen är trend stationär.
alternativ hypotes: serien har en enhetsrot (serien är inte stillastående).
en funktion skapas för att utföra KPSS-testet 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-testerna ger följande resultat-teststatistik, p-värde och det kritiska värdet vid 1%, 5% och 10% konfidensintervall.
ADF-test tillämpas nu på data.
:
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
baserat på signifikansnivån 0,05 och p-värdet för ADF-test kan nollhypotesen inte avvisas. Därför är serien icke-stationär.
KPSS – testerna ger följande resultat-teststatistik, p-värde och det kritiska värdet vid 1%, 5% och 10% konfidensintervall.
KPSS-test tillämpas nu på data.
:
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
baserat på signifikansnivån 0,05 och p-värdet av KPSS-testet finns det bevis för att avvisa nollhypotesen till förmån för alternativet. Därför är serien icke-stationär enligt KPSS-testet.
det är alltid bättre att tillämpa båda testerna, så att det kan säkerställas att serien verkligen är stillastående. Möjliga resultat av att tillämpa dessa stationära tester är följande:
här kan man på grund av skillnaden i resultaten från ADF-test och KPSS-test dra slutsatsen att serien är trend stationär och inte strikt stationär. Serien kan detrended genom differencing eller modell montering.
Detrending genom att skilja mellan 0163>
det är en av de enklaste metoderna för att detrendera en tidsserie. En ny serie konstrueras där värdet vid det aktuella tidssteget beräknas som skillnaden mellan den ursprungliga observationen och observationen vid föregående tidssteg.
Differencing tillämpas på data och resultatet plottas.
:
sunspots = sunspots - sunspots.shift(1)sunspots.dropna().plot(figsize=(12,8))
:
<AxesSubplot:>
ADF-test tillämpas nu på dessa detrended värden och stationaritet kontrolleras.
:
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
baserat på p-värdet av ADF-test finns det bevis för att avvisa nollhypotesen till förmån för alternativet. Därför är serien strikt stationär nu.
KPSS-test tillämpas nu på dessa detrenderade värden och stationaritet kontrolleras.
:
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
baserat på p-värdet av KPSS-testet kan nollhypotesen inte avvisas. Därför är serien stillastående.
slutsats Portugals
två tester för att kontrollera stationariteten i en tidsserie används, nämligen ADF-test och KPSS-test. Detrending utförs genom att använda differencing. Trend stationära tidsserier omvandlas till strikta stationära tidsserier. Erforderlig prognosmodell kan nu tillämpas på en stationär tidsseriedata.