시계열 데이터는 추세, 계절성, 주기 등의 패턴이 복합적으로 섞인 형태를 지닐 수 있다. 여러 요인이 합쳐진 데이터를 단번에 파악하기는 어렵지만, 각 요인을 분리하면 데이터를 쉽게 파악하는데 도움이 된다. 그래서 이 글에서는 R에 내장된 1920~1939Nottingham의 월 평균 기온이 담긴 nottem 데이터를 사용해서 4가지의 시계열 분해법을 간단히 소개하고자 한다.

nottem Dataset

 

1) 고전적인 분해

고전적인 분해법은 대부분의 시계열 분해의 기반이 될 정도로 비교적 단순하게 사용할 수 있다. 분해 방법에 대해 간단히 설명하자면 다음과 같다. 우선, 이동평균을 사용하여 추세-주기 성분을 계산한 후에 추세를 제거한 시계열을 계산한다. 그 다음, 계절별 추세를 제거한 평균에서 추세-주기 성분 값을 제외한 나머지 성분을 계산한다.

nottem %>% decompose(type='multiplicative') %>% autoplot()

trend, seasonal, remainder가 모두 더해지면 data가 된다. 월 평균 기온 데이터답게 계절 성분이 확실한 주기성을 갖는 것으로 보인다. 그런데, 고전 분해법은 결과에 나타난 것처럼 trendremainder의 처음과 끝의 일부 값을 얻을 수 없는 것이 단점이 존재한다.

 

2) X11 분해

X11 분해법은 양 끝의 관측값을 얻지 못하는 고전 분해의 단점을 지웠고, seasonal 패키지를 통해 사용할 수 있다.

nottem %>% seas(x11='') -> fit
autoplot(fit)

결과를 보면 trendremainder의 양 끝이 확실히 채워진 것이 확인된다. 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.windowdeafult 값은 (1.5 * period) / (1 - (1.5 / s.window))의 다음 홀수이지만, s.window에는 deafult 값이 없기 때문에 값을 설정해야 한다. 함수 사용이 번거롭지만, 위에서 소개한 나머지 분해 방법보다는 대체로 좋은 결과가 나타난다.

 

reference : https://cran.r-project.org/web/packages/seasonal/seasonal.pdf

728x90
반응형

'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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기