시계열 데이터는 추세, 계절성, 주기 등의 패턴이 복합적으로 섞인 형태를 지닐 수 있다. 여러 요인이 합쳐진 데이터를 단번에 파악하기는 어렵지만, 각 요인을 분리하면 데이터를 쉽게 파악하는데 도움이 된다. 그래서 이 글에서는 R에 내장된 1920~1939년 Nottingham의 월 평균 기온이 담긴 nottem 데이터를 사용해서 4가지의 시계열 분해법을 간단히 소개하고자 한다.
1) 고전적인 분해
고전적인 분해법은 대부분의 시계열 분해의 기반이 될 정도로 비교적 단순하게 사용할 수 있다. 분해 방법에 대해 간단히 설명하자면 다음과 같다. 우선, 이동평균을 사용하여 추세-주기 성분을 계산한 후에 추세를 제거한 시계열을 계산한다. 그 다음, 계절별 추세를 제거한 평균에서 추세-주기 성분 값을 제외한 나머지 성분을 계산한다.
nottem %>% decompose(type='multiplicative') %>% autoplot()
trend, seasonal, remainder가 모두 더해지면 data가 된다. 월 평균 기온 데이터답게 계절 성분이 확실한 주기성을 갖는 것으로 보인다. 그런데, 고전 분해법은 결과에 나타난 것처럼 trend와 remainder의 처음과 끝의 일부 값을 얻을 수 없는 것이 단점이 존재한다.
2) X11 분해
X11 분해법은 양 끝의 관측값을 얻지 못하는 고전 분해의 단점을 지웠고, seasonal 패키지를 통해 사용할 수 있다.
nottem %>% seas(x11='') -> fit
autoplot(fit)
결과를 보면 trend와 remainder의 양 끝이 확실히 채워진 것이 확인된다. seasonal은 큰 변화 없지만, trend는 고전 분해법보다 훨씬 매끄러운 결과를 보인다. 하지만, X11 분해는 월/분기별 데이터에서만 사용가능한 단점이 존재한다.
3) SEATS(Seasonal Extraction in ARIMA Time Series) 분해
SEATS 분해는 ARIMA 시계열(비정상 시계열)에서 계절성을 추출한 것으로, X11과 같이 월/분기별 데이터에서만 사용할 수 있다.
nottem %>% seas() %>% autoplot()
seasonal은 이전과 같지만, trend가 매우 다른 형태가 나타났기에 분해법의 성능이 좋아졌다고 할 수는 없다.
4) STL(Seasonal and Trend decomposition using Loess) 분해
STL 분해는 비선형 관계를 추정하는 기법인 Loess를 사용한 계절성과 추세를 분해하는 것으로, 어떤 종류의 데이터라도 사용가능하다.
nottem %>% stl(t.window=11, s.window="periodic", robust=TRUE) %>% autoplot()
STL에서는 t.window(trend-cycle window)와 s.window(seasonal window)의 매개변수에 따라 추세-주기와 계절성을 조정할 수 있다. t.window의 deafult 값은 (1.5 * period) / (1 - (1.5 / s.window))의 다음 홀수이지만, s.window에는 deafult 값이 없기 때문에 값을 설정해야 한다. 함수 사용이 번거롭지만, 위에서 소개한 나머지 분해 방법보다는 대체로 좋은 결과가 나타난다.
reference : https://cran.r-project.org/web/packages/seasonal/seasonal.pdf
'Programming Language > R' 카테고리의 다른 글
[R] 회귀분석 - 변수선택 (0) | 2021.02.16 |
---|---|
[R] 가설검정, 상관분석 (0) | 2021.02.15 |
[R] ggplot2 (0) | 2021.01.29 |
[R] Data Frame 2 - 결합, 결측치 (0) | 2021.01.22 |
[R] Data Frame 1 (0) | 2021.01.15 |
최근댓글