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)