Słownik metodologiczny · Regresja

Stacjonarność szeregu czasowego – jak ją sprawdzić i co zrobić, gdy jej brak?

Szereg stacjonarny ma stałą średnią, wariancję i strukturę autokorelacji. Pokazujemy, jak to sprawdzić testami ADF i KPSS, jak działa różnicowanie i jak opisać wynik w pracy.

Strona główna / Słownik / Stacjonarność
W skrócie: Szereg stacjonarny ma w czasie stałą średnią, wariancję i autokorelacje. Sprawdź to wykresem i dwoma testami o odwrotnych hipotezach: ADF (H0: pierwiastek jednostkowy) i KPSS (H0: stacjonarność). Szereg niestacjonarny często wystarczy zróżnicować.

Co to jest stacjonarność?

Stacjonarność (ang. stationarity) to własność szeregu czasowego, którego średnia i wariancja nie zmieniają się w czasie, a autokorelacja zależy tylko od odstępu między pomiarami. Szereg stacjonarny waha się wokół stałego poziomu. Szereg z trendem albo „wędrujący” jak błądzenie losowe stacjonarny nie jest. Jebb i in. (2015) zaliczają rozpoznanie trendu do podstawowych kroków opisu danych szeregowych.

Stacjonarność jest potrzebna przede wszystkim w modelach ARIMA. Ma też znaczenie przy korelowaniu dwóch szeregów: dwa niezależne szeregi z trendem łatwo dają korelację pozorną.

Jak sprawdzić stacjonarność?

  1. Wykres w czasie. Porównaj średnią i rozrzut na początku i na końcu szeregu.
  2. ACF. W szeregu niestacjonarnym autokorelacja przy kolejnych opóźnieniach maleje bardzo powoli.
  3. Test ADF (rozszerzony test Dickeya–Fullera). H0: pierwiastek jednostkowy, czyli szereg niestacjonarny. Podstawy rozkładu tej statystyki podali Dickey i Fuller (1979).
  4. Test KPSS (Kwiatkowski i in., 1992). Hipotezy są odwrócone: H0 to stacjonarność.

Gdy szereg jest niestacjonarny, zastosuj różnicowanie, czyli analizuj zmiany yt − yt−1. Wzorzec roczny usuwa się osobno – zob. sezonowość.

Przykład

Tygodniowa liczba zgłoszeń do telefonu wsparcia przez 150 tygodni (dane symulowane) wynosiła średnio 221.1 w pierwszych 50 tygodniach i 249.6 w ostatnich 50. Autokorelacja przy opóźnieniu 1 wynosiła .94. Test ADF nie odrzucił pierwiastka jednostkowego (DF = −2.64, p = .310), a KPSS odrzucił stacjonarność (KPSS = 2.30, p < .01). Po jednym różnicowaniu średnia zmiana wyniosła 0.36 zgłoszenia na tydzień (SD = 4.34), ADF = −5.67, p < .01, a KPSS = 0.05, p > .10. Oba testy wskazują, że zróżnicowany szereg jest stacjonarny.

Jak opisać w pracy

Stacjonarność szeregu sprawdzono rozszerzonym testem Dickeya–Fullera (ADF) i testem KPSS. Szereg w poziomach był niestacjonarny (ADF = −2.64, p = .310; KPSS = 2.30, p < .01). Po pierwszym różnicowaniu oba testy wskazywały na stacjonarność (ADF = −5.67, p < .01; KPSS = 0.05, p > .10), dlatego dalsze analizy prowadzono na zmianach tygodniowych.

Na co uważać

  • Brak istotności w ADF nie dowodzi niestacjonarności. W krótkich szeregach test ma małą moc, dlatego łącz go z KPSS i wykresem.
  • Nie różnicuj na zapas. Nadmierne różnicowanie wprowadza sztuczną ujemną autokorelację.
  • Wartości p z tablic są ucięte. W R funkcje adf.test() i kpss.test() podają p tylko między .01 a .10, więc zapisz „p < .01” lub „p > .10”.

Przykład z różnicowaniem i modelem prognostycznym znajdziesz we wpisie Szeregi czasowe w praktyce.

Przykład reprodukowalny

Stacjonarność w R

Kod symuluje błądzenie losowe z dryfem, wykonuje testy ADF i KPSS na szeregu w poziomach i po pierwszym różnicowaniu.

Test ADF i KPSS przed różnicowaniem i po nim

Dane wejściowe: 150 tygodniowych liczb zgłoszeń (błądzenie losowe z dryfem; dane symulowane, set.seed(2426)).

Co odczytać: średnie z początku i końca szeregu, ACF(1), statystyki ADF i KPSS z wartościami p (ostrzeżenia mówią, że p wychodzi poza zakres tablic) oraz te same wyniki dla różnic.

R
suppressPackageStartupMessages(library(tseries))
set.seed(2426)
n <- 150                                               # 150 tygodni
zgloszenia <- round(200 + cumsum(rnorm(n, 0.3, 4)))    # tygodniowa liczba zgłoszeń: błądzenie losowe z dryfem
round(c(M_1_50 = mean(zgloszenia[1:50]), M_101_150 = mean(zgloszenia[101:150])), 1)
round(acf(zgloszenia, lag.max = 1, plot = FALSE)$acf[2], 2)   # ACF(1) poziomu
adf.test(zgloszenia)                                   # H0: pierwiastek jednostkowy (niestacjonarny)
kpss.test(zgloszenia, null = "Level")                  # H0: stacjonarny wokół stałej średniej
roznice <- diff(zgloszenia)                            # zmiana z tygodnia na tydzień
round(c(M = mean(roznice), SD = sd(roznice)), 2)
round(acf(roznice, lag.max = 1, plot = FALSE)$acf[2], 2)      # ACF(1) różnic
adf.test(roznice)
kpss.test(roznice, null = "Level")
Wynik w R
   M_1_50 M_101_150 
    221.1     249.6 
[1] 0.94

	Augmented Dickey-Fuller Test

data:  zgloszenia
Dickey-Fuller = -2.6399, Lag order = 5, p-value = 0.3098
alternative hypothesis: stationary


	KPSS Test for Level Stationarity

data:  zgloszenia
KPSS Level = 2.296, Truncation lag parameter = 4, p-value = 0.01

Warning message:
In kpss.test(zgloszenia, null = "Level") :
  p-value smaller than printed p-value
   M   SD 
0.36 4.34 
[1] -0.11

	Augmented Dickey-Fuller Test

data:  roznice
Dickey-Fuller = -5.6716, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary

Warning message:
In adf.test(roznice) : p-value smaller than printed p-value

	KPSS Test for Level Stationarity

data:  roznice
KPSS Level = 0.046982, Truncation lag parameter = 4, p-value = 0.1

Warning message:
In kpss.test(roznice, null = "Level") :
  p-value greater than printed p-value

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet tseries).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. tseries (wersja 0.10.61): Trapletti, A., & Hornik, K. (2026). tseries: Time series analysis and computational finance (R package version 0.10-61) [Computer software]. https://doi.org/10.32614/CRAN.package.tseries

Najczęstsze pytania

Dlaczego testy ADF i KPSS mają odwrotne hipotezy?

W teście ADF hipotezą zerową jest pierwiastek jednostkowy, więc wynik istotny wskazuje na stacjonarność. W KPSS hipotezą zerową jest stacjonarność. Dwa testy razem dają pełniejszy obraz niż jeden.

Co to jest różnicowanie szeregu czasowego?

Różnicowanie zastępuje każdy pomiar zmianą względem pomiaru poprzedniego (yt − yt−1). Usuwa wędrujący poziom i trend liniowy. Liczba różnicowań to parametr d w modelu ARIMA.

Czy dane z dzienniczka muszą być stacjonarne?

Nie zawsze. Przy regresji z trendem albo przerwanym szeregu czasowym trend modeluje się wprost. Stacjonarność reszt lub zróżnicowanego szeregu jest potrzebna m.in. w modelach ARIMA.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Dickey, D. A., & Fuller, W. A. (1979). Distribution of the estimators for autoregressive time series with a unit root. Journal of the American Statistical Association, 74(366a), 427–431. https://doi.org/10.1080/01621459.1979.10482531 ● Otwarty dostęp: pełny tekst
  2. Jebb, A. T., Tay, L., Wang, W., & Huang, Q. (2015). Time series analysis for psychological research: Examining and forecasting change. Frontiers in Psychology, 6, Article 727. https://doi.org/10.3389/fpsyg.2015.00727 ● Otwarty dostęp
  3. Kwiatkowski, D., Phillips, P. C. B., Schmidt, P., & Shin, Y. (1992). Testing the null hypothesis of stationarity against the alternative of a unit root. Journal of Econometrics, 54(1–3), 159–178. https://doi.org/10.1016/0304-4076(92)90104-y

Cytowania BibTeX

@article{dickey1979distribution, author={Dickey, David A. and Fuller, Wayne A.}, title={{Distribution of the estimators for autoregressive time series with a unit root}}, journal={Journal of the American Statistical Association}, year={1979}, volume={74}, number={366a}, pages={427--431}, doi={10.1080/01621459.1979.10482531}}
@article{jebb2015time, author={Jebb, Andrew T. and Tay, Louis and Wang, Wei and Huang, Qiming}, title={{Time series analysis for psychological research: Examining and forecasting change}}, journal={Frontiers in Psychology}, year={2015}, volume={6}, eid={727}, doi={10.3389/fpsyg.2015.00727}}
@article{kwiatkowski1992testing, author={Kwiatkowski, Denis and Phillips, Peter C. B. and Schmidt, Peter and Shin, Yongcheol}, title={{Testing the null hypothesis of stationarity against the alternative of a unit root}}, journal={Journal of Econometrics}, year={1992}, volume={54}, number={1–3}, pages={159--178}, doi={10.1016/0304-4076(92)90104-y}}
R