본문 바로가기
데이터분석/R

[ADP] 시계열분석 (Time Series Analysis)

by 버섯도리 2022. 1. 15.

> # 03. 시계열분석 (Time Series Analysis)

> # 1. 차분 및 Box-Cox 변환


> data("AirPassengers")
> head(AirPassengers)
[1] 112 118 132 129 121 135

> par(mfrow=c(2,2))
plot(AirPassengers, main = "Air Passengers")
> plot(diff(AirPassengers), main = "Difference - Air Passenger")

> library(forecast)

> lambda <- BoxCox.lambda(AirPassengers)
> lambda
[1] -0.2947156
> new <- BoxCox(AirPassengers, lambda)

> plot(new, main = "Box Cox - Air Passengers")
> plot(diff(new), main = "Diff./ Box Cox - Air Passengers")

> # 많은 시계열 자료는 차분을 수행하면 정상 시계열로 변환이 가능하다.
> # 그리고 시간에 따라 증폭하는 시계열 자료를 Box-Cox 변환을 하면 정상 시계열로 변환이 가능하다.



> # 3. 확률 모형

> # 1) AR 모형

> x=w=rnorm(300)
> for (t in 2:300) x[t]=0.7*x[t-1]+w[t]
> x.ts = ts(x)

acf(x.ts, main = 'Yt=0.7*Yt-1+wt')
pacf(x.ts, main = 'Yt=0.7Yt-1+wt')

> # 2) MA 모형

> x=w=rnorm(700)
> for (t in 2:700) x[t]=x[t]+0.7*w[t]
> x.ts = ts(x)

acf(x.ts, main = 'Yt=at+0.7*at-1')
pacf(x.ts, main = 'Yt=at+0.7*at-1')


> # 3) ARMA 모형

> par(mfrow=c(1,2))
> x=arima.sim(n=5000, list(ar=0.7,ma=0.2))
> x.ts = ts(x)

> acf(x.ts, main = 'Yt=0.7*Yt-1+at+0.2*at-1')
> pacf(x.ts, main = 'Yt=0.7*Yt-1+at+0.2*at-1')


> # 4) ARIMA 모형

> # ① ARIMA 자료 입력 및 정상성 검정(Nile dataset)

> dd <- Nile
> dd
Time Series:
Start = 1871 
End = 1970 
Frequency = 1 
  [1] 1120 1160  963 1210 1160 1160  813 1230 1370 1140  995  935 1110  994 1020  960 1180  799  958 1140 1100 1210 1150
 [24] 1250 1260 1220 1030 1100  774  840  874  694  940  833  701  916  692 1020 1050  969  831  726  456  824  702 1120
 [47] 1100  832  764  821  768  845  864  862  698  845  744  796 1040  759  781  865  845  944  984  897  822 1010  771
 [70]  676  649  846  812  742  801 1040  860  874  848  890  744  749  838 1050  918  986  797  923  975  815 1020  906
 [93]  901 1170  912  746  919  718  714  740
> summary(dd)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  456.0   798.5   893.5   919.4  1032.5  1370.0 
> par(mfrow=c(1,1))
plot(dd, main = 'Annul Flows of Nile River')

> par(mfrow=c(1,2)) ;acf(Nile);pacf(Nile)

> library(tseries)
kpss.test(Nile)

  KPSS Test for Level Stationarity

data:  Nile
KPSS Level = 0.96543, Truncation lag parameter = 4, p-value = 0.01

경고메시지(들): 
In kpss.test(Nile) : p-value smaller than printed p-value
> # 검정결과 유의확률 0.01 < 0.05, 비정상시계열로 판단된다.


> # ② 최적모형: auto.arima 적용한 결과 ARIMA(1,1,1) 설정

> am5 <- auto.arima(dd)
summary(am5)
Series: dd 
ARIMA(1,1,1) 

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 20177:  log likelihood=-630.63
AIC=1267.25   AICc=1267.51   BIC=1275.04

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE     MASE        ACF1
Training set -16.06603 139.8986 109.9998 -4.005967 12.78745 0.825499 -0.03228482

> # ③ 예측 결과

forecast(am5)
     Point Forecast    Lo 80     Hi 80    Lo 95    Hi 95
1971       816.1813 634.1427  998.2199 537.7773 1094.585
1972       835.5596 640.8057 1030.3136 537.7091 1133.410
1973       840.4889 641.5646 1039.4132 536.2604 1144.717
1974       841.7428 640.0639 1043.4217 533.3015 1150.184
1975       842.0617 637.9589 1046.1645 529.9134 1154.210
1976       842.1429 635.7158 1048.5699 526.4399 1157.846
1977       842.1635 633.4558 1050.8712 522.9727 1161.354
1978       842.1687 631.2096 1053.1279 519.5345 1164.803
1979       842.1701 628.9843 1055.3558 516.1306 1168.210
1980       842.1704 626.7813 1057.5595 512.7613 1171.580

 

 

 

 

 

출처 : 2020 데이터 분석 전문가 ADP 필기 한 권으로 끝내기