Co to jest średnia ruchoma?
Średnia ruchoma (średnia krocząca, ang. moving average, m-MA) zastępuje każdą obserwację szeregu czasowego średnią z okna m sąsiednich wartości. Okno przesuwa się o jeden okres, więc powstaje nowy, gładszy szereg. Hyndman i Athanasopoulos (2021) opisują ją jako podstawowy sposób szacowania składowej trendu: sąsiednie obserwacje mają zbliżone wartości, a uśrednienie usuwa część losowości.
Okno wyśrodkowane, wsteczne i ważone
- Wyśrodkowana (m = 2k + 1): średnia z k okresów przed i po danym punkcie. Służy do opisu przeszłego trendu.
- Wsteczna: bieżąca i m − 1 poprzednich wartości. Nie korzysta z przyszłości, ale przesuwa trend w czasie (opóźnienie).
- Ważona, np. 2×12-MA: dla parzystego okresu sezonowości 13 wartości z wagami 1/24 na brzegach i 1/12 w środku. To średnia ważona, która dla danych miesięcznych usuwa wzór roczny (Hyndman i Athanasopoulos, 2021).
Przykład
Miesięczna liczba zgłoszeń do poradni przez 3 lata ma trend i sezonowość (dane symulowane). SD surowego szeregu wynosi 42.0, po 3-MA 36.1, a po 2×12-MA 19.1, bo zostaje sam trend: od 529.0 w 7. miesiącu do 585.8 w 30. Za tę gładkość płaci się utratą obserwacji: 2×12-MA nie ma wartości dla pierwszych i ostatnich 6 miesięcy (12 braków). W 7. miesiącu wyśrodkowana 3-MA daje 580.3, a wsteczna 560.0.
Jak opisać w pracy
Na co uważać
- Średnia ruchoma to opis, nie test. Wygładzony szereg ma silną autokorelację; nie licz na nim zwykłych testów ani korelacji.
- Nie myl z częścią MA w ARIMA, która modeluje błędy prognozy.
- Zmianę po interwencji oceniaj modelem, nie wygładzonym wykresem; zobacz regresję segmentową i przerwany szereg czasowy. Jebb i in. (2015) omawiają też opis trendu, sezonowości i prognozowanie.
Średnia ruchoma w R
Kod symuluje 36 miesięcy z trendem i sezonowością, liczy 3-MA wyśrodkowaną i wsteczną oraz wyśrodkowaną 2×12-MA, a następnie porównuje odchylenia standardowe szeregów.
Wygładzanie szeregu miesięcznego
R
suppressPackageStartupMessages(library(zoo))
set.seed(3720)
mies <- 1:36 # 3 lata danych miesięcznych
sezon <- 40 * sin(2 * pi * (mies - 4) / 12) # wzór roczny
y <- round(500 + 3 * mies + sezon + rnorm(36, 0, 25)) # zgłoszenia do poradni (dane symulowane)
ma3 <- rollmean(y, k = 3, fill = NA, align = "center") # 3-MA wyśrodkowana
ma3_wstecz <- rollmean(y, k = 3, fill = NA, align = "right") # 3-MA „wsteczna” (bieżący + 2 poprzednie)
w <- c(0.5, rep(1, 11), 0.5) / 12 # wagi 2×12-MA (wyśrodkowana dla danych miesięcznych)
ma2x12 <- rollapply(y, width = 13, FUN = function(z) sum(w * z), fill = NA, align = "center")
round(cbind(mies, y, ma3, ma3_wstecz, ma2x12)[c(1:3, 7, 8, 12, 13, 30, 36), ], 1)
round(c(sd_y = sd(y), sd_ma3 = sd(ma3, na.rm = TRUE), sd_2x12 = sd(ma2x12, na.rm = TRUE)), 1)
sum(is.na(ma2x12)) # utracone obserwacje na brzegachWynik w R
mies y ma3 ma3_wstecz ma2x12
[1,] 1 479 NA NA NA
[2,] 2 525 490.0 NA NA
[3,] 3 466 504.3 490.0 NA
[4,] 7 590 580.3 560.0 529.0
[5,] 8 590 579.7 580.3 528.0
[6,] 12 511 501.7 510.3 537.7
[7,] 13 472 496.7 501.7 539.9
[8,] 30 584 601.0 590.0 585.8
[9,] 36 580 NA 591.0 NA
sd_y sd_ma3 sd_2x12
42.0 36.1 19.1
[1] 12Bibliografia oprogramowania
Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet zoo). W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).
- 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/
- zoo (wersja 1.8.15): Zeileis, A., & Grothendieck, G. (2005). zoo: S3 infrastructure for regular and irregular time series. Journal of Statistical Software, 14(6), 1–27. https://doi.org/10.18637/jss.v014.i06
Najczęstsze pytania
Jak policzyć średnią ruchomą w R?
zoo::rollmean(y, k = 3, fill = NA) daje średnią wyśrodkowaną, a align = "right" wsteczną. Średnią ważoną, np. 2×12, policzysz przez rollapply() z wektorem wag albo stats::filter().
Jaką długość okna średniej ruchomej wybrać?
Przy sezonowości okno równe długości sezonu: 2×12 dla danych miesięcznych, 2×4 dla kwartalnych, 7 dla dziennych z rytmem tygodniowym. Bez sezonowości krótsze okno zachowuje więcej szczegółów, dłuższe mocniej wygładza.
Czym średnia ruchoma różni się od części MA w modelu ARIMA?
Średnia ruchoma wygładza obserwowane wartości, by opisać przeszły trend. Część MA w ARIMA to model zależności od wcześniejszych błędów prognozy, służący do prognozowania. Mimo nazwy to inne narzędzia.
Powiązane hasła
Poradniki, w których użyjesz tego pojęcia
Regresja segmentowa i przerwany szereg czasowy
Zmiana poziomu i nachylenia, gls z AR(1), sezonowość, szereg kontrolny, nieznany punkt załamania z bootstrapem, przykład w R i wzór opisu.
Czytaj →PoradnikSzeregi czasowe i ARIMA w praktyce
Trend, sezonowość, ACF i test Ljunga–Boxa, wybór modelu ARIMA w stats::arima, prognoza kontrfaktyczna i regresja segmentowa z kodem R.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- Hyndman, R. J., & Athanasopoulos, G. (2021). Forecasting: Principles and practice (3rd ed.). OTexts. https://otexts.com/fpp3/ ● Otwarty dostęp: pełny tekst
- 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
Cytowania BibTeX
@book{hyndman2021forecasting, author={Hyndman, Rob J. and Athanasopoulos, George}, title={{Forecasting: Principles and practice (3rd ed.)}}, year={2021}, publisher={OTexts}, url={https://otexts.com/fpp3/}}@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}}