모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🕑 오차의 자기상관 해결 04. ARDL 모델 : 자기회귀시차분포모형
🕑 오차의 자기상관 해결방법
1. 변수변환 & 회귀분석
2. 회귀 가변수를 이용한 회귀모형
3. 시계열 모형 : 선형회귀모형의 형태 : 시간이 다른 변수값(과거값)을 사용한다는 점에서 다름
• 자기회귀모형 (Autoregressive, AR model)
- y 변수를 과거의 y값으로 적합. .
• 자기회귀시차분포모형 (Autoregressive Distributed Lag –ARDL)
- y변수를 x변수와 과거의 x값, 과거의 y값으로 적합.
• 자기상관오차회귀모형 (Regression model with autoregressive error)
- y변수를 X변수로 적합. 오차항의 자기상관은 오차항의 AR로 적합.
• 그 외 시계열 모형 (Moving average (MA), ARMA, ARIMA)
4. 회귀모형에서 회귀계수의 추정방법을 바꾸는 방법
☑️ Y 변수만 분석할 경우 사용하는 방법
• 시계열분해기법(time series decomposition method)
• 지수평활법(exponential smoothing)
• ARIMA(autoregressive integrated moving average)
☑️ X-Y 변수의 관계를 분석할 경우 -> X의 변화의 따른 Y의 변화 파악
• 회귀모형
• 시계열회귀모형
• 자기회귀모형
• 자기회귀시차분포모형
• 자기상관오차회귀모형
• 전이함수잡음모형(transfer function noise model)
• 개입분석(intervention analysis)
이 중에서 자기회귀모형, 자기회귀시차분포모형, 자기상관오차회귀모형을 시계열 모형이라고 합니다.
🚩 시계열 모형을 위한 가정 - 안정적 시계열 : Stationary Condition (정상성 조건)
- a) 평균이 해당기간 동안 일정해야 하며, 트렌드가 없어야 합니다.
- b) 분산이 해당기간 동안 일정해야 합니다.
- c) 공분산 혹은 자기상관은 시차에만 의존해야 합니다. 즉, 일정 시차를 두고 반복되는 추세를 보줘야 합니다.
- d) 위 가정을 만족하지 못하면 변수변환 (로그, 차분)을 통해 정상시계열로 만들어 다음의 모델을 사용합니다.
• AR
• DL
• Regression model with autoregressive error
• 혹은 좀더 복잡한 시계열 모형을 사용하여 해결
🕑 ARDL 모델 : 자기회귀시차분포모형
☑️ $y$변수 적합을 위해 독립변수로 종속변수의 과거값 $y_{t−1}$, 독립변수 $x_t$ 를 사용할 수 있습니다.
$ARDL : Y_t = β_0 + β_1Y_{t-1}+ϴ_1X_{t}+ϴ_2X_{t-1}+u_t$
추정을 위해 복잡한 ML, CSS-ML 보다는 단순 선형회귀처럼 OLS를 사용합니다.
🕑 ARDL 모델 : dynlm( ) 함수
lm( ) 함수를 쓸 수도 있지만 time 단위에 대한 데이터 전처리를 거쳐야 하므로, 전처리가 필요없는 dynlm 을 사용합니다.
L( ) 옵션 : 변수의 과거값을 집어넣어 모델을 적합할 때 사용합니다.
d( ) 옵션 : 변수를 모델에서 차분형태로 넣을 때 사용합니다. 다른 변수를 차분하지 않더라도 사용 가능한 옵션입니다.
dynlm 함수는 arima 함수와는 달리 summary 결과 p-value도 제공하기 때문에 유의미한 변수 파악에 용이합니다.
🕑 예제: 미국의 인플레이션율
1983년 12월 부터 2006년 5월까지의 미국의 소비자 물가지수를 이용해 구한 1984년 1월 부터 2006년 5월까지의 월간 인플레이션율 (monthly inflationrate) 데이터입니다. 분석을 위해 자기회귀 모형 (AR model) 사용할 것이며, 만약 독립변수인 임금변화율이 동기간에 대해 조사되었다면 자기회귀시차분포모형도 가능합니다.
ARDL 모형은 독립변수로 X변수도 가지고 있기 때문에 X변수에 해당하는 부분을 ts데이터로 변환해야 사용이 가능합니다.
또한 Y변수인 월간 인플레이션 증가율은 로그 차분된 형태이므로 X변수인 임금도 로그 차분된 형태를 사용합니다. 따라서, 월간 임금 증가율을 계산해서 사용할 것입니다.
☑️ ARDL로 AR(2) 만들기 : 종속변수 적합을 위해 종속변수의 1, 2차 과거값만을 사용
## Y변수 : INFLN / X변수 : PCWAGE
pcwage<-ts(data$PCWAGE[2:270], start=c(1984,1), frequency=12)
# install.packages("dynlm")
library(dynlm)
## ARDL로 AR(2) 만들기
## 단, 추정방법이 다름
## p-value 출력
model<- dynlm(inf~L(inf,1)+L(inf,2))
summary(model)
##
## Time series regression with "ts" data:
## Start = 1984(3), End = 2006(5)
##
## Call:
## dynlm(formula = inf ~ L(inf, 1) + L(inf, 2))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.73418 -0.10764 -0.01249 0.10669 0.91821
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.20928 0.02178 9.608 < 2e-16 ***
## L(inf, 1) 0.35522 0.06052 5.870 1.31e-08 ***
## L(inf, 2) -0.18054 0.06034 -2.992 0.00303 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1975 on 264 degrees of freedom
## Multiple R-squared: 0.1202, Adjusted R-squared: 0.1136
## F-statistic: 18.04 on 2 and 264 DF, p-value: 4.535e-08
☑️ ARDL 모형 1 : $ Y_{t} = Y_{t-1} + Y_{t-2} + X_{t} + X_{t-1} + X_{t-2} + X_{t-3}$
## model = Y_t = Y_t-1 + Y_t-2 + X_t + X_t-1 + X_t-2 + X_t-3
model<- dynlm(inf~L(inf,1)+L(inf,2)+pcwage+L(pcwage,1)+L(pcwage,2)+L(pcwage,3))
summary(model)
##
## Time series regression with "ts" data:
## Start = 1984(4), End = 2006(5)
##
## Call:
## dynlm(formula = inf ~ L(inf, 1) + L(inf, 2) + pcwage + L(pcwage,
## 1) + L(pcwage, 2) + L(pcwage, 3))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.66383 -0.11125 -0.01086 0.10381 0.92941
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.09888 0.04681 2.112 0.03561 *
## L(inf, 1) 0.35364 0.06041 5.854 1.45e-08 ***
## L(inf, 2) -0.19756 0.06042 -3.270 0.00122 **
## pcwage 0.11490 0.08339 1.378 0.16942
## L(pcwage, 1) 0.03773 0.08125 0.464 0.64272
## L(pcwage, 2) 0.05927 0.08117 0.730 0.46592
## L(pcwage, 3) 0.23613 0.08294 2.847 0.00477 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.194 on 259 degrees of freedom
## Multiple R-squared: 0.1673, Adjusted R-squared: 0.148
## F-statistic: 8.674 on 6 and 259 DF, p-value: 1.305e-08
ARDL 모형 적합 결과 절편, 한달, 두달 전의 물가 상승률과 세달 전의 임금상승률이 유의미한 것으로 파악되었습니다.
유의미하다고 나온 항들만을 사용해 모델을 만들어 주겠습니다.
☑️ ARDL 모형 2 : $ Y_{t} = Y_{t-1} + Y_{t-2} + X_{t-3}$
## 위 모델에서 유의한 변수를 가져옴
## 3개월 전 임금상승률이 현재 인플레이션율에 영향을 줌
model<- dynlm(inf~L(inf,1)+L(inf,2)+L(pcwage,3))
summary(model)
##
## Time series regression with "ts" data:
## Start = 1984(4), End = 2006(5)
##
## Call:
## dynlm(formula = inf ~ L(inf, 1) + L(inf, 2) + L(pcwage, 3))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.70369 -0.10903 -0.00532 0.09734 0.92304
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.14381 0.02854 5.039 8.71e-07 ***
## L(inf, 1) 0.36133 0.05945 6.078 4.27e-09 ***
## L(inf, 2) -0.19324 0.05967 -3.238 0.001357 **
## L(pcwage, 3) 0.26100 0.07488 3.485 0.000576 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1938 on 262 degrees of freedom
## Multiple R-squared: 0.1592, Adjusted R-squared: 0.1496
## F-statistic: 16.54 on 3 and 262 DF, p-value: 7.182e-10
모든 변수가 유의미하기 때문에, 이 모델이 완전히 적합했다면 더 이상 오차항에 자기상관이 남아있으면 안됩니다.
따라서 자기상관을 확인해보겠습니다.
☑️ acf plot
library(forecast)
Acf(model$residual)
acf plot 결과, 11차에서 자기상관이 크게 관찰되었습니다. Box test를 통해 자기상관 존재 차수를 확인해보겠습니다.
☑️ 5차 Box-Pierce Test
Box.test(model$residual,lag=5,type="Box-Pierce")
##
## Box-Pierce test
##
## data: model$residual
## X-squared = 2.9962, df = 5, p-value = 0.7006
☑️ 6차 Box-Pierce Test
Box.test(model$residual,lag=6,type="Box-Pierce")
##
## Box-Pierce test
##
## data: model$residual
## X-squared = 6.5001, df = 6, p-value = 0.3696
☑️ 11차 Box-Pierce Test
Box.test(model$residual,lag=11,type="Box-Pierce")
##
## Box-Pierce test
##
## data: model$residual
## X-squared = 21.098, df = 11, p-value = 0.03237
☑️ 12차 Box-Pierce Test
Box.test(model$residual,lag=12,type="Box-Pierce")
##
## Box-Pierce test
##
## data: model$residual
## X-squared = 21.105, df = 12, p-value = 0.04887
☑️ 13차 Box-Pierce Test
Box.test(model$residual,lag=13,type="Box-Pierce")
##
## Box-Pierce test
##
## data: model$residual
## X-squared = 26.252, df = 13, p-value = 0.01572
BOX test 결과 11차수에서 가장 먼저 자기상관이 발견되었으므로, 11차수를 잡아줘야 합니다.
☑️ ARDL 모형 3 : $Y_{t} = Y_{t-1} + Y_{t-2} + Y_{t-11} + X_{t-3}$
11번째 자기상관을 잡아주기 위해서 L( ) 옵션 을 사용하여 11개월 전의 데이터를 모델에 넣어주겠습니다.
model<- dynlm(inf~L(inf,1)+L(inf,2)+L(inf,11)+L(pcwage,3))
summary(model)
##
## Time series regression with "ts" data:
## Start = 1984(12), End = 2006(5)
##
## Call:
## dynlm(formula = inf ~ L(inf, 1) + L(inf, 2) + L(inf, 11) + L(pcwage,
## 3))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.69615 -0.11279 -0.00621 0.10124 0.88410
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.11687 0.03184 3.670 0.000295 ***
## L(inf, 1) 0.34352 0.06046 5.682 3.66e-08 ***
## L(inf, 2) -0.19750 0.06032 -3.274 0.001208 **
## L(inf, 11) 0.14263 0.06408 2.226 0.026906 *
## L(pcwage, 3) 0.24513 0.07942 3.087 0.002250 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1951 on 253 degrees of freedom
## Multiple R-squared: 0.1732, Adjusted R-squared: 0.1601
## F-statistic: 13.25 on 4 and 253 DF, p-value: 8.174e-10
☑️ acf plot
Acf(model$residuals)
11차 자기상관이 크게 줄어들긴 했지만 해석상으로 이해가 힘들고, 성능면으로도 큰 차이가 없습니다.
모델의 해석도 중요하기 때문에, 해석과 성능을 모두 고려한 최종 모델로는 위에서 만든 ARDL 모형 2를 사용할 것입니다.
☑️ 최종모델 -> ARDL 모형 2 : $ Y_{t} = Y_{t-1} + Y_{t-2} + X_{t-3}$
## 3개월 전 임금상승률이 현재 인플레이션율에 유의미한 영향을 줌
## 따라서, Y_t+3 까지는 어느정도 예측이 가능할 것.
model<- dynlm(inf~L(inf,1)+L(inf,2)+L(pcwage,3))
summary(model)
##
## Time series regression with "ts" data:
## Start = 1984(4), End = 2006(5)
##
## Call:
## dynlm(formula = inf ~ L(inf, 1) + L(inf, 2) + L(pcwage, 3))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.70369 -0.10903 -0.00532 0.09734 0.92304
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.14381 0.02854 5.039 8.71e-07 ***
## L(inf, 1) 0.36133 0.05945 6.078 4.27e-09 ***
## L(inf, 2) -0.19324 0.05967 -3.238 0.001357 **
## L(pcwage, 3) 0.26100 0.07488 3.485 0.000576 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1938 on 262 degrees of freedom
## Multiple R-squared: 0.1592, Adjusted R-squared: 0.1496
## F-statistic: 16.54 on 3 and 262 DF, p-value: 7.182e-10
☑️ acf plot
Acf(model$residuals)
'📈📉 비즈니스 어낼리틱스 > 🕑 시계열 분석' 카테고리의 다른 글
🕑시계열 데이터 분석 13 - 자기상관 해결 5. 자기상관오차회귀모형 (0) | 2023.04.25 |
---|---|
🕑시계열데이터 분석 11 - 자기상관 해결 3. 자기회귀모형 (AR Model) (0) | 2023.04.21 |
🕑시계열데이터 분석 10 - 자기상관 해결 2. 회귀가변수 (2) | 2023.04.20 |
🕑시계열데이터 분석 09 - 자기상관 해결 1. 차분 (2) | 2023.04.20 |
🕑시계열데이터 분석 08 - 시계열 회귀분석 (0) | 2023.04.15 |