모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🕑 오차의 자기상관 해결 01. 차분
🚩 선형회귀 모델의 타당성을 파악하기 위해서, 모집단 모형에는 8가지 가정이 존재합니다.
- 가정1 : 변수 $Y$와 $X$의 관계는 선형이다.
- scatter plot으로 검증.
- 가정2 : $X$는 확률변수가 아닌 주어진 상수값이다.
- Cross sectional data에서는 그냥 받아들이지만, 시계열데이터에서는 고려.
- 가정3 : $X$값이 주어져 있을 때, 오차항의 평균은 0이다.
- $E(εi|X)=0$
- 즉, X값이 주어져 있을 때 Y의 평균은 체계적인 부분.
- 잔차플롯으로 검증. 전반적인 잔차가 0에 모여있는지 확인.
- 가정4 : $X$값이 주어졌을 때, 오차항의 분산은 $σ^2$으로 모든 개체 i에 대해 동일하다.
- 등분산가정으로써, $X$값이 주어졌을 때 $Y$의 분산은 $σ^2$으로 모든 개체i에 대해 동일함.
- 잔차플롯으로 검증. 전반적인 잔차의 분포가 사각형이거나, 원 형태를 띌 때 만족함.
- 로그 변환을 통해 점점 변하는 분산을 잡아줌.
- 가정5 : 서로 다른 개체 간 오차항들은 상관되어 있지 않다. 즉, 자기상관이없다.
- 시계열 데이터에서는 이 가정을 만족시키기 어려움.
- 서로 다른 개체 간 $Y$변수들은 상관되어 있지 않다.
- 자기상관이 없다.
- Acf, Durbin Watson Test, BG test 등의 방법을 사용해 검증.
- 가정6 : 여러 개의 $X$변수들 사이에는 선형관계가 심하지 않다. 다중공선성 문제가 심하지 않다.
- 상관계수로 검정.
- 가정7 : 모형설정에 오류가 없다.
- 이는 그냥 참이라고 받아들인다.
- 가정8 : 오차항은 정규분포를 따름을 가정한다.
- 평균0. 등분산성. $Y$는 정규분포를 따름을 가정함.
- 객체수만 많으면 괜찮음.
🚩 이 중에서, 5번 가정인 오차의 자기상관을 해결하기 위해 일반적으로 차분을 진행합니다.
🕑 차분
오차의 자기상관 해결을 위해서는 몇 가지 방법이 있습니다. 이번에는 차분을 알아보도록 하겠습니다.
차분 이후 모델의 해석이 아예 바뀌게 되기는 하지만, 자기상관 해결을 위한 가장 확실한 방법입니다.
일반적으로 1차 차분을 진행하지만, 계절의 경우 12차 차분을 하기도 합니다.
계절 자기회귀모형의 경우 1차 계절차분을 통해 자기상관을 줄이기도 합니다.
12차 차분 하기 싫으면, 계절조정해서 데이터를 가져오는 편이 좋습니다.
🕑 변환모델 해석
☑️ 차분 모델 해석 : $Y$변수의 전 시점 대비 변화량으로 해석 (원래 Y변수의 단위 유지).
☑️ log 변환 모델 해석 : $Y$변수의 증가율(%)로 해석.
☑️ log log 변환 모델 해석 : $Y$변수 증가율의 증가율, 즉 %의 증가율로 해석. %p 단위.
☑️ log & 차분 모델 해석 : $Y$변수의 전 시점 대비 변화율로 해석 (단위 유지 안됨, %로 변환가능(×100))
☑️ Y변수가 금융상품의 가격이라면 수익률 (로그 수익률이라고 부르기도 함)로 해석가능.
보통 돈과 관련된 경제 경영 변수들은 log 차분을 취하는 경우가 많습니다.
차분을 하지 않고 자기상관을 해결하려면 시계열 모형을 사용하는데, 이는 다음 포스팅에서 알아보겠습니다.
🕑 시계열 자료의 안정성 (Stationary process)
Stationarity에는 등분산성, 자기상관성이 포함됩니다. 이를 만족하는 경우에만 시계열 모형 사용이 가능합니다. 따라서, 차분 외의 다른 방법으로 자기상관을 잡기 위해서는 일단 데이터의 stationary를 만족시키고, 다시 위의 가정을 검증해야 합니다.
🕑 1차 차분 - 트렌드 제거
데이터를 차분하고 나면 차분 전의 트렌드를 없애줍니다.
예를 들자면, 시간에 따라 증가하는 트렌드를 없애주는 것입니다.
🕑 데이터 확인
df1 <- read.csv("Table6_1.csv")
summary(df1)
>>
year consumption income wealth interest
Min. :1947 Min. : 976.4 Min. :1035 Min. : 5167 Min. :-10.35094
1st Qu.:1960 1st Qu.:1518.4 1st Qu.:1679 1st Qu.: 8507 1st Qu.: -0.07559
Median :1974 Median :2664.8 Median :3062 Median :12858 Median : 1.46251
Mean :1974 Mean :2888.4 Mean :3215 Mean :15439 Mean : 1.21197
3rd Qu.:1987 3rd Qu.:4080.3 3rd Qu.:4559 3rd Qu.:21059 3rd Qu.: 3.11080
Max. :2000 Max. :6257.8 Max. :6539 Max. :39591 Max. : 5.84833
lnconsump lndpi lnwealth dlnconsump dlndpi
Min. :6.884 Min. :6.942 Min. : 8.550 Min. :-0.008331 Min. :-0.006662
1st Qu.:7.325 1st Qu.:7.426 1st Qu.: 9.048 1st Qu.: 0.024172 1st Qu.: 0.024460
Median :7.888 Median :8.027 Median : 9.462 Median : 0.034971 Median : 0.031922
Mean :7.826 Mean :7.935 Mean : 9.493 Mean : 0.035051 Mean : 0.034778
3rd Qu.:8.314 3rd Qu.:8.425 3rd Qu.: 9.955 3rd Qu.: 0.048197 3rd Qu.: 0.045919
Max. :8.742 Max. :8.786 Max. :10.586 Max. : 0.069925 Max. : 0.084918
NA's :1 NA's :1
dlnwealth dinterest rlnconsump rlndpi rlnwealth
Min. :-0.09725 Min. :-5.6905 Min. :4.671 Min. :4.728 Min. :5.796
1st Qu.: 0.01980 1st Qu.:-0.6367 1st Qu.:4.964 1st Qu.:5.042 1st Qu.:6.160
Median : 0.03993 Median : 0.0368 Median :5.345 Median :5.437 Median :6.398
Mean : 0.03773 Mean : 0.2628 Mean :5.309 Mean :5.382 Mean :6.435
3rd Qu.: 0.06306 3rd Qu.: 0.8381 3rd Qu.:5.631 3rd Qu.:5.700 3rd Qu.:6.740
Max. : 0.10663 Max. : 5.7639 Max. :5.919 Max. :5.944 Max. :7.184
NA's :1 NA's :1 NA's :1 NA's :1 NA's :1
rinterest dconsump dincome dwealth rconsump
Min. :-5.415 Min. :-22.20 Min. :-20.4 Min. :-1423.5 Min. : 704.4
1st Qu.: 0.307 1st Qu.: 40.10 1st Qu.: 56.6 1st Qu.: 152.2 1st Qu.:1086.7
Median : 1.359 Median : 87.70 Median :101.1 Median : 554.7 Median :1908.6
Mean : 1.051 Mean : 99.65 Mean :103.8 Mean : 622.7 Mean :2074.6
3rd Qu.: 2.193 3rd Qu.:147.50 3rd Qu.:135.9 3rd Qu.: 822.4 3rd Qu.:2915.7
Max. : 4.325 Max. :289.40 Max. :314.1 Max. : 4004.2 Max. :4462.2
NA's :1 NA's :1 NA's :1 NA's :1 NA's :1
rincome rwealth rinterest2 time
Min. : 767.7 Min. : 3726 Min. :-5.4057 Min. : 1.00
1st Qu.:1219.2 1st Qu.: 6392 1st Qu.: 0.3217 1st Qu.:14.25
Median :2190.4 Median : 9064 Median : 1.3850 Median :27.50
Mean :2308.1 Mean :11117 Mean : 1.0789 Mean :27.50
3rd Qu.:3232.7 3rd Qu.:15059 3rd Qu.: 2.2960 3rd Qu.:40.75
Max. :4637.9 Max. :28885 Max. : 4.4371 Max. :54.00
NA's :1 NA's :1 NA's :1
## 사용할 부분만 ts데이터로 변경
## 년도별 데이터로 주기 설정
df1.ts <- ts(df1[, 2:8], start = 1947, frequency = 1)
head(df1.ts)
is.ts(df1.ts)
>>
consumption income wealth interest lnconsump lndpi lnwealth
[1,] 976.4 1035.2 5166.815 -10.350940 6.883873 6.942350 8.550012
[2,] 998.1 1090.0 5280.757 -4.719804 6.905853 6.993933 8.571825
[3,] 1025.3 1095.6 5607.351 1.044063 6.932741 6.999057 8.631834
[4,] 1090.9 1192.7 5759.515 0.407346 6.994758 7.083975 8.658608
[5,] 1107.1 1227.0 6086.056 -5.283152 7.009499 7.112328 8.713756
[6,] 1142.4 1266.8 6243.864 -0.277011 7.040886 7.144249 8.739354
>> [1] TRUE
데이터의 세부 정보 확인을 위해서는, 각 feature들의 plot 먼저 살펴봐야합니다!!
plot(df1.ts, col="red")
plot(df1$lnconsump)
plot 결과, 점점 증가하는 트렌드가 눈에 띕니다.
아직 모델을 피팅하지는 않았지만. 차분을 진행해 트렌드를 제거해줘야 할 것 같습니다.
🕑 자기상관 파악
☑️ 1. acf plot
모델 혹은 데이터 잔차의 각 차수에 대한 자기상관성을 보여줍니다.
par(mfrow=c(2,2))
acf(df1$lnconsump)
acf(df1$lndpi)
acf(df1$lnwealth)
☑️ 2. 더빈왓슨검정
dwtest( ) 함수 : 단, 오차항의 1차 자기상관만 검정한다는 한계가 있습니다.
## 세 feature 모두 자기상관 존재
library(lmtest)
dwtest(lnconsump~1,data=df1.ts)
dwtest(lndpi~1,data=df1.ts)
dwtest(lnwealth~1,data=df1.ts)
>>
Durbin-Watson test
data: lnconsump ~ 1
DW = 0.00502, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0
>>
Durbin-Watson test
data: lndpi ~ 1
DW = 0.0050353, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0
>>
Durbin-Watson test
data: lnwealth ~ 1
DW = 0.009523, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0
durbinWatsonTest( ) 함수 : 차수 설정이 가능한 더빈 왓슨 검정입니다.
library(car)
durbinWatsonTest(lm(lnconsump~1,data=df1.ts),max.lag=3)
>>
lag Autocorrelation D-W Statistic p-value
1 0.9441254 0.005020027 0
2 0.8880973 0.018101451 0
3 0.8326139 0.038208817 0
Alternative hypothesis: rho[lag] != 0
☑️ 3.bgtest
bgtest( ) 함수 : 더빈 왓슨 검정의 단점을 보완해줍니다.
## 세 feature 모두 자기상관 존재
bgtest(lnconsump~1,data=df1.ts,order=3)
bgtest(lndpi~1,data=df1.ts,order=3)
bgtest(lnwealth~1,data=df1.ts,order=3)
>>
Breusch-Godfrey test for serial correlation of order up to 3
data: lnconsump ~ 1
LM test = 50.823, df = 3, p-value = 5.335e-11
>>
Breusch-Godfrey test for serial correlation of order up to 3
data: lndpi ~ 1
LM test = 50.524, df = 3, p-value = 6.179e-11
>>
Breusch-Godfrey test for serial correlation of order up to 3
data: lnwealth ~ 1
LM test = 50.627, df = 3, p-value = 5.875e-11
🕑 모델피팅
model.ts <- lm(lnconsump ~ lndpi + lnwealth + interest, data = df1.ts)
summary(model.ts)
>>
Call:
lm(formula = lnconsump ~ lndpi + lnwealth + interest, data = df1.ts)
Residuals:
Min 1Q Median 3Q Max
-0.018441 -0.010001 0.000337 0.007038 0.032579
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.4677120 0.0427780 -10.933 7.33e-15 ***
lndpi 0.8048728 0.0174978 45.998 < 2e-16 ***
lnwealth 0.2012702 0.0175926 11.441 1.43e-15 ***
interest -0.0026891 0.0007619 -3.529 0.000905 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.01193 on 50 degrees of freedom
Multiple R-squared: 0.9996, Adjusted R-squared: 0.9995
F-statistic: 3.783e+04 on 3 and 50 DF, p-value: < 2.2e-16
🕑 모델 자기상관 체크
☑️잔차 plot
par(mfrow = c(1,1))
plot(model.ts$residuals, type = 'b')
☑️ acf plot
acf(model.ts$residuals)
잔차 plot과 acf plot을 보면, 전반적인 분산은 0 주변에 모여있지만 1차 자기상관이 있는 것을 확인할 수 있습니다.
자기상관성 검증을 위해 몇 가지 테스트를 시행하겠습니다.
dwtest(model.ts)
>>
Durbin-Watson test
data: model.ts
DW = 1.2892, p-value = 0.0009445
alternative hypothesis: true autocorrelation is greater than 0
durbinWatsonTest(model.ts, max.lag = 3)
>>
lag Autocorrelation D-W Statistic p-value
1 0.29775555 1.289232 0.010
2 -0.02840612 1.933710 0.694
3 0.01631809 1.678649 0.218
Alternative hypothesis: rho[lag] != 0
bgtest(model.ts, order = 1)
bgtest(model.ts, order = 3)
>>
Breusch-Godfrey test for serial correlation of order up to 1
data: model.ts
LM test = 5.312, df = 1, p-value = 0.02118
>>
Breusch-Godfrey test for serial correlation of order up to 3
data: model.ts
LM test = 6.6573, df = 3, p-value = 0.08366
각 테스트에서, 1차 자기상관에 검정 결과 p-value가 모두 유의수준 0.05보다 작기 때문에 귀무가설을 기각합니다.
귀무가설이 자기상관이 없다는 가정이므로, 본 모델의 잔차는 1차 자기상관을 가지고 있음을 의미합니다.
따라서, 차분을 통해 자기상관을 제거한 후 다시 모델을 피팅해보도록 하겠습니다.
🕑 차분 후 모델 피팅
diff(DATA$COLUMN, difference) 함수 : 차분할 데이터의 열과 차수를 지정해줍니다.
ynew <- diff(df1$lnconsump, difference = 1)
lndpinew <- diff(df1$lndpi, difference = 1)
lnwealthnew <- diff(df1$lnwealth, difference = 1)
interestnew <- diff(df1$interest, difference = 1)
## 모델생성
model.ts2 <- lm(ynew ~ lndpinew + lnwealthnew + interestnew)
summary(model.ts2)
>>
Call:
lm(formula = ynew ~ lndpinew + lnwealthnew + interestnew)
Residuals:
Min 1Q Median 3Q Max
-0.027777 -0.006015 -0.001278 0.008555 0.021556
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0070456 0.0033955 2.075 0.0433 *
lndpinew 0.7148135 0.0816885 8.750 1.39e-11 ***
lnwealthnew 0.0782675 0.0381738 2.050 0.0457 *
interestnew 0.0007339 0.0008010 0.916 0.3640
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.01078 on 49 degrees of freedom
Multiple R-squared: 0.6453, Adjusted R-squared: 0.6236
F-statistic: 29.72 on 3 and 49 DF, p-value: 4.303e-11
☑️ 잔차 plot
plot(model.ts2$residuals, type = 'b')
☑️ acf plot
acf(model.ts2$residuals)
차분 후 모델에 대해 acf plot 결과, 1차 자기상관이 깔끔히 해결되었습니다!!
library(lmtest)
dwtest(model.ts3)
>>
Durbin-Watson test
data: model.ts3
DW = 1.3364, p-value = 0.001143
alternative hypothesis: true autocorrelation is greater than 0
library(car)
durbinWatsonTest(model.ts3, max.lag = 1)
durbinWatsonTest(model.ts3, max.lag = 3)
>>
lag Autocorrelation D-W Statistic p-value
1 0.2642951 1.336395 0
Alternative hypothesis: rho != 0
>>
lag Autocorrelation D-W Statistic p-value
1 0.26429515 1.336395 0.000
2 -0.11161897 2.086674 0.948
3 -0.09501358 1.926016 0.696
Alternative hypothesis: rho[lag] != 0
bgtest(model.ts3, order = 1)
bgtest(model.ts3, order = 3)
>>
Breusch-Godfrey test for serial correlation of order up to 1
data: model.ts3
LM test = 4.4559, df = 1, p-value = 0.03478
>>
Breusch-Godfrey test for serial correlation of order up to 3
data: model.ts3
LM test = 6.6822, df = 3, p-value = 0.08275
더빈 왓슨 테스트, bg 테스트의 결과는 아직 자기상관이 있는 것으로 나옵니다. 하지만 해당 통계량은 항상 정확히 산출되는 값이 아니므로, 이는 참고용으로 사용하고 acf plot을 사용하는 것이 좋다고 합니다!! 따라서 위 모델 역시 acf plot 결과 자기상관이 해결된 것이라 생각해도 큰 문제는 없습니다.
5번 가정은 해결했지만, 데이터에 로그변환과 차분을 취했기에 완전히 다른 데이터가 된 셈입니다.
따라서, 8가지 가정 중 1번 가정부터 다시 봐야합니다.
보통 잔차 plot을 한 번 그려서 3,4번 가정에 대해 검증하고, 6번 가정을 검증합니다.
cor( ) 함수로 정량 변수 간 상관계수를 확인하고,
정량 변수와 범주형 변수 간의 상관관계 확인에는 vif( ) 함수를 사용합니다.
다음 포스팅에서는 자기상관 제거를 위해 다른 방법을 사용해 보겠습니다.
'📈📉 비즈니스 어낼리틱스 > 🕑 시계열 분석' 카테고리의 다른 글
🕑시계열데이터 분석 11 - 자기상관 해결 3. 자기회귀모형 (AR Model) (0) | 2023.04.21 |
---|---|
🕑시계열데이터 분석 10 - 자기상관 해결 2. 회귀가변수 (2) | 2023.04.20 |
🕑시계열데이터 분석 08 - 시계열 회귀분석 (0) | 2023.04.15 |
🕑시계열데이터 분석 07 - 평활기법 (0) | 2023.04.14 |
🕑시계열데이터 분석 06 - 시계열 데이터 분해 (0) | 2023.04.13 |