1. 시계열 자료 - 시간의 흐름에 따라 관찰된 데이터
2. 정상성
대부분의 시계열 자료는 다루기 어려운 비정상성 시계열 자료이기 때문에
분석하기 쉬운 정상성 시계열 자료로 변환
(1) 평균이 일정 : 모든 시점에 대해 일정한 평균을 가진다.
- 평균이 일정하지 않은 시계열은 차분(difference)을 통해 정상화
- 차분은 현시점 자료에서 이전 시점 자료를 빼는 것
(2) 분산도 시점에 의존하지 않음
- 분산이 일정하지 않은 시계열은 변환(transformation)을 통해 정상화
(3) 공분산도 시차에만 의존할 뿐, 특정 시점에는 의존하지 않음
3. 시계열 모형
(1) 자기회귀 모형 (Autoregressive model, AR)
P 시점 이전의 자료가 현재 자료에 영향을 줌
오차항 = 백색잡음과정(white noise process)
자기상관함수(Autocorrelation Function, ACF) : k 기간 떨어진 값들의 상관계수
부분자기상관함수(partial ACF) : 서로 다른 두 시점의 중간에 있는 값들의 영향을 제외시킨 상관계수
ACF 빠르게 감소, PACF는 어느 시점에서 절단점을 갖는다
PACF가 2시점에서 절단점 가지면 AR(1) 모형
(2) 이동평균 모형 (Moving average model, MA)
유한한 갯수의 백색잡음 결합이므로 항상 정상성 만족
ACF가 절단점을 갖고, PACF는 빠르게 감소
(3) 자기회귀누적이동평균 모형 (Autoregressive integrated moving average model, ARIMA)
비정상 시계열 모형
차분이나 변환을 통해 AR, MA, 또는 이 둘을 합한 ARMA 모형으로 정상화
ARIMA(p, d, q) - d : 차분 차수 / p : AR 모형 차수 / q : MA 모형 차수
(4) 분해 시계열
시계열에 영향을 주는 일반적인 요인을 시계열에서 분리해 분석하는 방법
계절 요인(seasonal factor), 순환 요인(cyclical), 추세 요인(trend), 불규칙 요인(random)
# R functions for TimeSeries
# 1) 소스 데이터를 시계열 데이터로 변환
ts(data, frequency = n, start = c(시작년도, 월))
# 2) 시계열 데이터를 x, trend, seasonal, random 값으로 분해
decompose(data)
# 3) 시계열 데이터를 이동평균한 값 생성
SMA(data, n = 이동평균수)
# 4) 시계열 데이터를 차분
diff(data, differences = 차분횟수)
# 5) ACF 값과 그래프를 통해 래그 절단값을 확인
acf(data, lag.max = 래그수)
# 6) PACF 값과 그래프를 통해 래그 절단값을 확인
pacf(data, lag.max = 래그수)
# 7) 데이터를 활용하여 최적의 ARIMA 모형을 선택
auto.arima(data)
# 8) 선정된 ARIMA 모형으로 데이터를 보정(fitting)
arima(data, order = c(p, d, q))
# 9) ARIMA 모형에 의해 보정된 데이터를 통해 미래값을 예측
forecast.Arima(fittedData, h = 미래예측수)
# 10) 시계열 데이터를 그래프로 표현
plot.ts(시계열데이터)
# 11) 예측된 시계열 데이터를 그래프로 표현
plot.forecast(예측된시계열데이터)
# Decompose non-seasonal data
# 영국왕들의 사망시 나이
library(TTR)
library(forecast)
kings <- scan("http://robjhyndman.com/tsdldata/misc/kings.dat", skip = 3)
kings
## [1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69
## [24] 59 48 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56
# 시계열 데이터로 변환
kings_ts <- ts(kings)
kings_ts
## Time Series:
## Start = 1
## End = 42
## Frequency = 1
## [1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69
## [24] 59 48 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56
plot.ts(kings_ts)
# 이동평균
kings_sma3 <- SMA(kings_ts, n = 3)
kings_sma8 <- SMA(kings_ts, n = 8)
kings_sma12 <- SMA(kings_ts, n = 12)
par(mfrow = c(2,2))
plot.ts(kings_ts)
plot.ts(kings_sma3)
plot.ts(kings_sma8)
plot.ts(kings_sma12)
# 차분을 통해 데이터 정상화
kings_diff1 <- diff(kings_ts, differences = 1)
kings_diff2 <- diff(kings_ts, differences = 2)
kings_diff3 <- diff(kings_ts, differences = 3)
plot.ts(kings_ts)
plot.ts(kings_diff1) # 1차 차분만 해도 어느정도 정상화 패턴을 보임
plot.ts(kings_diff2)
plot.ts(kings_diff3)
par(mfrow = c(1,1))
mean(kings_diff1); sd(kings_diff1)
## [1] -0.09756098
## [1] 18.35185
# 1차 차분한 데이터로 ARIMA 모형 확인
acf(kings_diff1, lag.max = 20) # lag 2부터 점선 안에 존재. lag 절단값 = 2. --> MA(1)
pacf(kings_diff1, lag.max = 20) # lag 4에서 절단값 --> AR(3)
# --> ARIMA(3,1,1)
# 자동으로 ARIMA 모형 확인
auto.arima(kings) # --> ARIMA(0,1,1)
## Series: kings
## ARIMA(0,1,1)
##
## Coefficients:
## ma1
## -0.7218
## s.e. 0.1208
##
## sigma^2 estimated as 236.2: log likelihood=-170.06
## AIC=344.13 AICc=344.44 BIC=347.56
# 예측
kings_arima <- arima(kings_ts, order = c(3,1,1)) # 차분통해 확인한 값 적용
kings_arima
##
## Call:
## arima(x = kings_ts, order = c(3, 1, 1))
##
## Coefficients:
## ar1 ar2 ar3 ma1
## -0.5805 -0.4778 -0.3196 -0.0293
## s.e. 0.4646 0.2669 0.2140 0.4985
##
## sigma^2 estimated as 222: log likelihood = -169.29, aic = 348.59
kings_fcast <- forecast.Arima(kings_arima, h = 5)
kings_fcast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 43 64.79235 45.69668 83.88803 35.58804 93.99667
## 44 67.48443 46.98649 87.98238 36.13553 98.83334
## 45 68.43173 47.31180 89.55165 36.13159 100.73186
## 46 63.78577 41.85158 85.71996 30.24032 97.33122
## 47 65.17004 40.94308 89.39700 28.11810 102.22198
plot.forecast(kings_fcast)
kings_arima1 <- arima(kings_ts, order = c(0,1,1)) # auto.arima 추천값 적용
kings_arima1
##
## Call:
## arima(x = kings_ts, order = c(0, 1, 1))
##
## Coefficients:
## ma1
## -0.7218
## s.e. 0.1208
##
## sigma^2 estimated as 230.4: log likelihood = -170.06, aic = 344.13
kings_fcast1 <- forecast.Arima(kings_arima1, h = 5)
kings_fcast1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 43 67.75063 48.29647 87.20479 37.99806 97.50319
## 44 67.75063 47.55748 87.94377 36.86788 98.63338
## 45 67.75063 46.84460 88.65665 35.77762 99.72363
## 46 67.75063 46.15524 89.34601 34.72333 100.77792
## 47 67.75063 45.48722 90.01404 33.70168 101.79958
plot.forecast(kings_fcast1)
# Decompose seasonal data
# 1946년 1월부터 1959년 12월까지 뉴욕의 월별 출생자 수 데이터
data <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
birth <- ts(data, frequency = 12, start = c(1946, 1))
birth
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct
## 1946 26.663 23.598 26.931 24.740 25.806 24.364 24.477 23.901 23.175 23.227
## 1947 21.439 21.089 23.709 21.669 21.752 20.761 23.479 23.824 23.105 23.110
## 1948 21.937 20.035 23.590 21.672 22.222 22.123 23.950 23.504 22.238 23.142
## 1949 21.548 20.000 22.424 20.615 21.761 22.874 24.104 23.748 23.262 22.907
## 1950 22.604 20.894 24.677 23.673 25.320 23.583 24.671 24.454 24.122 24.252
## 1951 23.287 23.049 25.076 24.037 24.430 24.667 26.451 25.618 25.014 25.110
## 1952 23.798 22.270 24.775 22.646 23.988 24.737 26.276 25.816 25.210 25.199
## 1953 24.364 22.644 25.565 24.062 25.431 24.635 27.009 26.606 26.268 26.462
## 1954 24.657 23.304 26.982 26.199 27.210 26.122 26.706 26.878 26.152 26.379
## 1955 24.990 24.239 26.721 23.475 24.767 26.219 28.361 28.599 27.914 27.784
## 1956 26.217 24.218 27.914 26.975 28.527 27.139 28.982 28.169 28.056 29.136
## 1957 26.589 24.848 27.543 26.896 28.878 27.390 28.065 28.141 29.048 28.484
## 1958 27.132 24.924 28.963 26.589 27.931 28.009 29.229 28.759 28.405 27.945
## 1959 26.076 25.286 27.660 25.951 26.398 25.565 28.865 30.000 29.261 29.012
## Nov Dec
## 1946 21.672 21.870
## 1947 21.759 22.073
## 1948 21.059 21.573
## 1949 21.519 22.025
## 1950 22.084 22.991
## 1951 22.964 23.981
## 1952 23.162 24.707
## 1953 25.246 25.180
## 1954 24.712 25.688
## 1955 25.693 26.881
## 1956 26.291 26.987
## 1957 26.634 27.735
## 1958 25.912 26.619
## 1959 26.992 27.897
plot.ts(birth, main = "뉴욕 월별 출생자 수")
# 데이터 분해 - trend, seasonal, random 데이터 추세 확인
birth_comp <- decompose(birth)
plot(birth_comp)
birth_comp$trend
## Jan Feb Mar Apr May Jun Jul
## 1946 NA NA NA NA NA NA 23.98433
## 1947 22.35350 22.30871 22.30258 22.29479 22.29354 22.30562 22.33483
## 1948 22.43038 22.43667 22.38721 22.35242 22.32458 22.27458 22.23754
## 1949 22.06375 22.08033 22.13317 22.16604 22.17542 22.21342 22.27625
## 1950 23.21663 23.26967 23.33492 23.42679 23.50638 23.57017 23.63888
## 1951 24.00083 24.12350 24.20917 24.28208 24.35450 24.43242 24.49496
## 1952 24.27204 24.27300 24.28942 24.30129 24.31325 24.35175 24.40558
## 1953 24.78646 24.84992 24.92692 25.02362 25.16308 25.26963 25.30154
## 1954 25.92446 25.92317 25.92967 25.92137 25.89567 25.89458 25.92963
## 1955 25.64612 25.78679 25.93192 26.06388 26.16329 26.25388 26.35471
## 1956 27.21104 27.21900 27.20700 27.26925 27.35050 27.37983 27.39975
## 1957 27.44221 27.40283 27.44300 27.45717 27.44429 27.48975 27.54354
## 1958 27.68642 27.76067 27.75963 27.71037 27.65783 27.58125 27.49075
## 1959 26.96858 27.00512 27.09250 27.17263 27.26208 27.36033 NA
## Aug Sep Oct Nov Dec
## 1946 23.66213 23.42333 23.16112 22.86425 22.54521
## 1947 22.31167 22.26279 22.25796 22.27767 22.35400
## 1948 22.21988 22.16983 22.07721 22.01396 22.02604
## 1949 22.35750 22.48862 22.70992 22.98563 23.16346
## 1950 23.75713 23.86354 23.89533 23.87342 23.88150
## 1951 24.48379 24.43879 24.36829 24.29192 24.27642
## 1952 24.44475 24.49325 24.58517 24.70429 24.76017
## 1953 25.34125 25.42779 25.57588 25.73904 25.87513
## 1954 25.98246 26.01054 25.88617 25.67087 25.57312
## 1955 26.40496 26.45379 26.64933 26.95183 27.14683
## 1956 27.44150 27.45229 27.43354 27.44488 27.46996
## 1957 27.56933 27.63167 27.67804 27.62579 27.61212
## 1958 27.46183 27.42262 27.34175 27.25129 27.08558
## 1959 NA NA NA NA NA
birth_comp$seasonal
## Jan Feb Mar Apr May Jun
## 1946 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1947 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1948 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1949 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1950 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1951 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1952 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1953 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1954 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1955 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1956 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1957 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1958 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## 1959 -0.6771947 -2.0829607 0.8625232 -0.8016787 0.2516514 -0.1532556
## Jul Aug Sep Oct Nov Dec
## 1946 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1947 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1948 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1949 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1950 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1951 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1952 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1953 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1954 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1955 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1956 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1957 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1958 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
## 1959 1.4560457 1.1645938 0.6916162 0.7752444 -1.1097652 -0.3768197
# 시계열 데이터에서 계절성 요인 제거
birth_adjusted <- birth - birth_comp$seasonal
plot.ts(birth_adjusted, main = "birth - seasonal factor")
# 차분을 통해 정상성 확인
birth_diff1 <- diff(birth_adjusted, differences = 1)
plot.ts(birth_diff1, main = "1차 차분") # --> 분산의 변동성이 크다
acf(birth_diff1, lag.max = 20)
pacf(birth_diff1, lag.max = 20)
# PACF 절단값이 명확하지 않아 ARIMA 모형 확정이 어렵다.
# ---> Auto.Arima 함수 사용
auto.arima(birth) # ARIMA(2,1,2)(1,1,1)[12]
## Series: birth
## ARIMA(2,1,2)(1,1,1)[12]
##
## Coefficients:
## ar1 ar2 ma1 ma2 sar1 sma1
## 0.6539 -0.4540 -0.7255 0.2532 -0.2427 -0.8451
## s.e. 0.3004 0.2429 0.3228 0.2879 0.0985 0.0995
##
## sigma^2 estimated as 0.4076: log likelihood=-157.45
## AIC=328.91 AICc=329.67 BIC=350.21
birth_arima <- arima(birth, order = c(2,1,2), seasonal = list(order = c(1,1,1), period = 12))
birth_arima
##
## Call:
## arima(x = birth, order = c(2, 1, 2), seasonal = list(order = c(1, 1, 1), period = 12))
##
## Coefficients:
## ar1 ar2 ma1 ma2 sar1 sma1
## 0.6539 -0.4540 -0.7255 0.2532 -0.2427 -0.8451
## s.e. 0.3004 0.2429 0.3228 0.2879 0.0985 0.0995
##
## sigma^2 estimated as 0.3918: log likelihood = -157.45, aic = 328.91
birth_fcast <- forecast.Arima(birth_arima)
birth_fcast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 1960 27.69056 26.88679 28.49433 26.46130 28.91982
## Feb 1960 26.07680 24.98034 27.17326 24.39991 27.75369
## Mar 1960 29.26544 28.04020 30.49069 27.39160 31.13929
## Apr 1960 27.59444 26.29165 28.89724 25.60199 29.58689
## May 1960 28.93193 27.54860 30.31527 26.81630 31.04757
## Jun 1960 28.55379 27.07347 30.03411 26.28983 30.81774
## Jul 1960 29.84713 28.26538 31.42888 27.42806 32.26620
## Aug 1960 29.45347 27.77916 31.12778 26.89284 32.01410
## Sep 1960 29.16388 27.40777 30.91999 26.47814 31.84962
## Oct 1960 29.21343 27.38167 31.04519 26.41200 32.01486
## Nov 1960 27.26221 25.35695 29.16746 24.34837 30.17604
## Dec 1960 28.06863 26.09098 30.04628 25.04408 31.09318
## Jan 1961 27.66908 25.63754 29.70062 24.56210 30.77606
## Feb 1961 26.21255 24.12791 28.29719 23.02437 29.40073
## Mar 1961 29.22612 27.08633 31.36591 25.95360 32.49865
## Apr 1961 27.58011 25.38474 29.77547 24.22259 30.93762
## May 1961 28.71354 26.46431 30.96277 25.27363 32.15344
## Jun 1961 28.21736 25.91651 30.51820 24.69852 31.73620
## Jul 1961 29.98728 27.63644 32.33812 26.39198 33.58258
## Aug 1961 29.96127 27.56138 32.36117 26.29095 33.63160
## Sep 1961 29.56515 27.11690 32.01339 25.82088 33.30941
## Oct 1961 29.54543 27.04965 32.04121 25.72846 33.36240
## Nov 1961 27.57845 25.03603 30.12088 23.69015 31.46676
## Dec 1961 28.40796 25.81976 30.99616 24.44965 32.36627
plot(birth_fcast, main = "Forecasts 1960 & 1961")
# 1987년 1월부터 1993년 12월까지 리조트 기념품매장 매출액
data <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
fancy <- ts(data, frequency = 12, start = c(1987, 1))
fancy
## Jan Feb Mar Apr May Jun Jul
## 1987 1664.81 2397.53 2840.71 3547.29 3752.96 3714.74 4349.61
## 1988 2499.81 5198.24 7225.14 4806.03 5900.88 4951.34 6179.12
## 1989 4717.02 5702.63 9957.58 5304.78 6492.43 6630.80 7349.62
## 1990 5921.10 5814.58 12421.25 6369.77 7609.12 7224.75 8121.22
## 1991 4826.64 6470.23 9638.77 8821.17 8722.37 10209.48 11276.55
## 1992 7615.03 9849.69 14558.40 11587.33 9332.56 13082.09 16732.78
## 1993 10243.24 11266.88 21826.84 17357.33 15997.79 18601.53 26155.15
## Aug Sep Oct Nov Dec
## 1987 3566.34 5021.82 6423.48 7600.60 19756.21
## 1988 4752.15 5496.43 5835.10 12600.08 28541.72
## 1989 8176.62 8573.17 9690.50 15151.84 34061.01
## 1990 7979.25 8093.06 8476.70 17914.66 30114.41
## 1991 12552.22 11637.39 13606.89 21822.11 45060.69
## 1992 19888.61 23933.38 25391.35 36024.80 80721.71
## 1993 28586.52 30505.41 30821.33 46634.38 104660.67
plot.ts(fancy) # 분산이 증가하는 경향 --> log 변환으로 분산 조정
fancy_log <- log(fancy)
plot.ts(fancy_log)
fancy_diff <- diff(fancy_log, differences = 1)
plot.ts(fancy_diff)
# 평균은 어느정도 일정하지만 특정 시기에 분산이 크다
# --> ARIMA 보다는 다른 모형 적용 추천
acf(fancy_diff, lag.max = 100)
pacf(fancy_diff, lag.max = 100)
auto.arima(fancy) # ARIMA(1,1,1)(0,1,1)[12]
## Series: fancy
## ARIMA(1,1,1)(0,1,1)[12]
##
## Coefficients:
## ar1 ma1 sma1
## 0.2401 -0.9013 0.7499
## s.e. 0.1427 0.0709 0.1790
##
## sigma^2 estimated as 16146440: log likelihood=-693.69
## AIC=1395.38 AICc=1395.98 BIC=1404.43
fancy_arima <- arima(fancy, order = c(1,1,1), seasonal = list(order = c(0,1,1), period = 12))
fancy_fcast <- forecast.Arima(fancy_arima)
plot(fancy_fcast)
# 1500년부터 1969년까지 화산폭발 먼지량
data <- scan("http://robjhyndman.com/tsdldata/annual/dvi.dat", skip = 1)
dust <- ts(data, start = c(1500))
dust
## Time Series:
## Start = 1500
## End = 1969
## Frequency = 1
## [1] 200 150 100 50 0 0 0 0 0 0 0 0 0 0 0 0 0
## [18] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [35] 0 50 50 50 0 0 0 0 0 0 0 0 0 0 0 0 0
## [52] 0 0 100 500 350 200 100 0 0 0 0 0 0 0 0 0 0
## [69] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [86] 0 200 150 100 50 0 0 0 200 150 100 50 40 30 20 10 400
## [103] 300 210 110 10 20 50 50 50 40 30 20 10 200 150 100 50 0
## [120] 0 0 0 0 0 0 100 75 50 25 0 0 120 90 60 30 0
## [137] 40 30 120 85 150 400 275 175 75 0 60 45 30 15 100 75 50
## [154] 25 0 0 0 0 0 0 340 255 170 85 130 100 65 30 0 0
## [171] 0 0 200 150 100 50 0 0 0 0 280 210 140 70 0 0 0
## [188] 0 0 0 0 0 0 140 285 205 105 45 0 0 0 0 0 0
## [205] 0 0 0 300 225 150 75 0 80 60 40 20 0 120 90 60 30
## [222] 100 75 50 55 15 15 15 15 15 160 130 90 50 0 0 0 0
## [239] 0 0 0 0 0 0 60 45 30 15 0 0 0 0 200 150 160
## [256] 255 150 95 40 80 110 77 45 13 0 0 0 0 0 0 0 0
## [273] 50 37 25 13 0 0 0 180 135 90 45 400 300 200 160 45 30
## [290] 15 0 0 0 0 0 120 130 90 50 130 90 60 30 0 0 0
## [307] 0 0 0 0 0 80 180 170 170 695 490 375 195 30 15 0 200
## [324] 150 100 70 80 65 50 75 50 200 130 80 40 525 450 375 300 225
## [341] 150 75 0 0 0 100 205 140 90 30 0 0 0 0 0 0 140
## [358] 105 70 35 0 160 120 80 40 0 0 0 160 120 80 40 0 0
## [375] 0 120 90 60 30 0 0 0 0 400 300 240 170 50 170 125 85
## [392] 45 20 15 10 5 0 0 30 25 15 5 180 135 90 45 0 60
## [409] 45 30 15 0 60 45 30 15 0 0 0 0 0 0 0 0 0
## [426] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [443] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [460] 0 0 0 0 160 120 80 40 0 0 0
plot.ts(dust) # 한두개 데이터를 제외하고는 평균과 분산이 어느정도 일정하다 --> 차분 안함.
acf(dust, lag.max = 20) # lag = 4 : MA(3)
pacf(dust, lag.max = 20) # lag = 3 : AR(2)
auto.arima(dust) # ARIMA(1,0,2)
## Series: dust
## ARIMA(1,0,2) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 mean
## 0.4723 0.2694 0.1279 57.5178
## s.e. 0.0936 0.0969 0.0752 8.4883
##
## sigma^2 estimated as 4897: log likelihood=-2661.84
## AIC=5333.68 AICc=5333.81 BIC=5354.45
# d = 0 이므로 AR(2) / MA(3) / ARIMA(2,0,3) 중 선택해서 적용 가능.
# 모수가 가장 적은 모형을 선택하는 것을 추천 --> AR(2) 적용
dust_arima <- arima(dust, order = c(2,0,0))
dust_fcast <- forecast.Arima(dust_arima, h = 30)
plot.forecast(dust_fcast)