logo

R 에서 아리마 모형으로 예측하는 법 📂통계적분석

R 에서 아리마 모형으로 예측하는 법

실습

1.png

R 내장데이터 UKDriverDeaths는 1969년부터 1984년까지 영국 월별 운전자 사상자에 대한 데이터다. 언뜻 보아도 계절형 아리마 모형을 따르고, 실제로 모형을 찾아내는것은 별로 어렵지 않다.

20190722\_131357.png

그러나 최종적으로 얻은 모형으로 식을 직접 써서 계산하는 것은 무척 손이 많이 가고 복잡한 일이다. 따라서 predict() 함수를 사용한다.

  • n.ahead 옵션을 통해 얼마나 길게 예측할지를 정할 수 있으며,
  • 예측값 $pred
  • 표준오차 $se를 사용해 예측구간을 찾을 수도 있다.

20190722\_131423.png

시각화

가능한 것과는 별개로 예측구간을 그리는 코드를 실제로 작성하는 것 역시 무척 번거로운 일인데, 다행스럽게도 TSA 패키지를 사용하고 있다면 plot() 함수만으로 간단하게 예측구간을 그려낼 수 있다.

2.png

다음은 유용하게 쓰이는 몇가지 옵션들이다:

  • n.ahead: predict() 함수에서와 마찬가지로 얼마나 길게 예측할지를 정한다.
  • n1: 플랏을 어디부터 시작할지를 정한다.
  • newxreg: 시계열 회귀분석을 할 때 필요한 데이터를 준다.

참고로 plot() 함주 자체도 예측값과 예측구간을 리턴한다. 아쉽게도 예측구간의 신뢰수준을 정하는 옵션은 없으므로 바꾸고 싶다면 번거롭더라도 predict() 함수를 통해 직접 그려내는 수밖에 없다.

주의사항

한편 arima()로 얻은 모델이 아니라 auto.arima()로 얻은 모형을 plot()에 바로 집어넣으면 다음과 같은 (우리가 별로 원하지 않는) 그림이 그려진다. 오류가 아니라 arima()auto.arima()의 차이 때문에 다른 결과를 얻은 것이다. 이 사실을 아는 것만으로도 예제를 찾아보고 패키지를 다시 까는 삽질을 하지 않을 수 있게 되므로 이러한 모양의 그림을 기억해두는 것을 강력하게 권장한다.

3.png

코드

library(TSA)
win.graph(6,4); plot(UKDriverDeaths,main='UKDriverDeaths')
out<-arima(UKDriverDeaths,order=c(1,0,1)
           ,seasonal = list(order=c(1,0,1),period=12)); out
predict(out,n.ahead = 24)
win.graph(6,4); plot(out,n.ahead = 24, type='l'
                     ,n1=1980, main='95% 예측구간')
 
library(forecast)
wrong<-auto.arima(UKDriverDeaths); summary(wrong)
win.graph(6,4); plot(wrong)