티스토리 뷰
INTRO
forecast package : auto.arima, forecast
R console> install.packages.("forecast")
시계열 자료 분석 및 모형 예측
[예제] 1871~1970년 아스완 댐에서 측정한 나일강의 연간 유입량 시계열 데이터
test_time_series_analysis.R
rm(list=ls())
library(forecast)
library(TTR)
## Nile time-series data
Nile
str(Nile)
class(Nile)
mode(Nile)
summary(Nile)
par(mfrow=c(1,1))
plot(Nile)
출력결과
> ## Nile time-series data
> Nile
Time Series:
Start = 1871
End = 1970
Frequency = 1
[1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935 1110 994
[15] 1020 960 1180 799 958 1140 1100 1210 1150 1250 1260 1220 1030 1100
[29] 774 840 874 694 940 833 701 916 692 1020 1050 969 831 726
[43] 456 824 702 1120 1100 832 764 821 768 845 864 862 698 845
[57] 744 796 1040 759 781 865 845 944 984 897 822 1010 771 676
[71] 649 846 812 742 801 1040 860 874 848 890 744 749 838 1050
[85] 918 986 797 923 975 815 1020 906 901 1170 912 746 919 718
[99] 714 740
> str(Nile)
Time-Series [1:100] from 1871 to 1970: 1120 1160 963 1210 1160 1160 813 1230 1370 1140 ...
> class(Nile)
[1] "ts"
> mode(Nile)
[1] "numeric"
> summary(Nile)
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(Nile)
Smoothing Method : Simple Moving Average method를 이용한 Data 시각화
test_time_series_analysis.R
...
# SMA : Simple Moving Average method
Nile.sma3 = SMA(Nile, n = 3)
Nile.sma5 = SMA(Nile, n = 5)
Nile.sma10 = SMA(Nile, n = 10)
par(mfrow=c(2,2))
plot(Nile, main="Original data by 1-years periodic")
plot(Nile.sma3, main="Smothing by 3-years periodic")
plot(Nile.sma5, main="Smothing by 5-years periodic")
plot(Nile.sma10, main="Smothing by 10-years periodic")
출력결과
차분을 이용한 비정상성 시계열 자료 정상화
test_time_series_analysis.R
...
# diff
Nile.diff1 = diff(Nile,differences=1)
Nile.diff2 = diff(Nile,differences=2)
Nile.diff3 = diff(Nile,differences=3)
par(mfrow=c(2,2))
plot(Nile)
plot(Nile.diff1)
plot(Nile.diff2)
plot(Nile.diff3)
출력결과
자기상관함수/부분자기상관함수 분석
test_time_series_analysis.R
...
# ACF
par(mfrow=c(2,2))
acf(Nile, lag.max=20)
acf(Nile.diff1, lag.max=20)
acf(Nile.diff2, lag.max=20)
acf(Nile.diff3, lag.max=20)
# Partial ACF
par(mfrow=c(2,2))
pacf(Nile, lag.max=20)
pacf(Nile.diff1, lag.max=20)
pacf(Nile.diff2, lag.max=20)
pacf(Nile.diff3, lag.max=20)
출력결과
d = 1의 경우
PACF : Lag=3 or Lag=11 부터 임계치 안에 있다고 볼 수 있으나 Lag=2로 판단, p = 1
ACF : Lag=9 부터 임계치 안에 있음, q = 8
-> ARIMA(1,1,8)
d = 2의 경우
PACF : Lag=9 부터 임계치 안에 있음, p = 8
ACF : Lag=2 or Lag=9 부터 임계치 안에 있다고 볼 수 있으나 Lag=2로 판단, q = 1
-> ARIMA(8,2,1)
forecast package의 auto.arima 함수 사용하여 ARIMA Model 분석
test_time_series_analysis.R
...
auto.arima(Nile)
auto.arima(Nile.diff1)
auto.arima(Nile.diff2)
auto.arima(Nile.diff3)
출력결과
...
> ## auto.arima
> auto.arima(Nile)
Series: Nile
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 = 20177: log likelihood = -630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
> auto.arima(Nile.diff1)
Series: Nile.diff1
ARIMA(1,0,1) with zero mean
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 = 20177: log likelihood = -630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
> auto.arima(Nile.diff2)
Series: Nile.diff2
ARIMA(5,0,0) with zero mean
Coefficients:
ar1 ar2 ar3 ar4 ar5
-1.2286 -1.1253 -0.8620 -0.6070 -0.2993
s.e. 0.0965 0.1450 0.1632 0.1467 0.0992
sigma^2 = 29842: log likelihood = -642.4
AIC=1296.79 AICc=1297.72 BIC=1312.3
> auto.arima(Nile.diff3)
Series: Nile.diff3
ARIMA(5,0,0) with zero mean
Coefficients:
ar1 ar2 ar3 ar4 ar5
-1.7318 -1.9023 -1.5768 -1.0222 -0.4343
s.e. 0.0919 0.1701 0.2034 0.1733 0.0974
sigma^2 = 47208: log likelihood = -658.97
AIC=1329.93 AICc=1330.87 BIC=1345.38
fitting by auto.arima & my_arima
test_time_series_analysis.R
...
## fitting
# auto.arima : Arima(1,1,1)
Nile.auto_arima <- arima(Nile, order=c(1,1,1))
# auto.arima_diff1 : Arima(1,0,1)
Nile.auto_arima_diff1 <- arima(Nile.diff1, order=c(1,0,1))
# myARIMA(1,1,8)
Nile.my1_arima <- arima(Nile, order=c(1,1,8))
# myARIMA(8,2,1)
Nile.my2_arima <- arima(Nile, order=c(8,2,1))
## forecast
Nile.forecast_1 <- forecast(Nile.auto_arima, h=20)
Nile.forecast_2 <- forecast(Nile.auto_arima_diff1, h=20)
Nile.forecast_3 <- forecast(Nile.my1_arima, h=20)
Nile.forecast_4 <- forecast(Nile.my2_arima, h=20)
par(mfrow=c(2,2))
plot(Nile.forecast_1)
plot(Nile.forecast_2)
plot(Nile.forecast_3)
plot(Nile.forecast_4)
출력결과
수동으로 분석한 ARIMA Model과 자동으로 분석한 auto.arima Model을 비교하여 향후 20년 데이터를 예측해 본다.
반응형
'R' 카테고리의 다른 글
(macOS)[R] 데이터 분석 : Exercise (0) | 2022.04.21 |
---|---|
(macOS)[R] 시계열 예측 : 실습 - 1 (0) | 2022.04.18 |
(macOS)[R] 시계열 예측 : 이론 (0) | 2022.04.18 |
(macOS)[R] 다변량 분석 : 상관 분석(Correlation Analysis) - 4 (0) | 2022.04.17 |
(macOS)[R] 다변량 분석 : 상관 분석(Correlation Analysis) - 3 (0) | 2022.04.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- r
- Pandas
- pyserial
- Templates
- arduino
- vscode
- Model
- analysis
- COVID-19
- raspberrypi
- Python
- Regression
- MacOS
- SSH
- 코로나19
- github
- ERP
- DS18B20
- sublime text
- 라즈베리파이
- git
- 코로나
- Django
- 자가격리
- Raspberry Pi
- server
- CSV
- template
- DAQ
- 확진
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함