저번 실습까지는 가상의 Data를 이용하여 생성된 회귀 모형을 분석했다. 이번 실습에서는 실제 Data를 이용하여 DW d Test와 Durbin's h Test를 하는 실습을 진행해보려 한다. 필요한 통계 개념은 이미 이전 게시물들에서 다루었기 때문에 현재 게시물에서는 다루지 않는다. 통계 개념이 필요한 경우 아래의 링크를 참고하면 된다.
- DW d Test: https://bing-su-b.tistory.com/134
- Durbin's h Test: https://bing-su-b.tistory.com/135
실습에 사용될 Data는 FRED에서 다운로드했다. 데이터 전처리 과정은 해당 게시물에서 다루었기 때문에 생략한다. 이 과정에 대한 설명이 필요한 경우 하이퍼링크를 참고하면 된다.
실습에 사용된 각각의 파일 이름에 해당하는 실제 데이터는 아래와 같다.
DATA ip;
INFILE '/home/u63329964/mydata/ip.prn'; /* mydata 디렉토리의 ip.prn 파일을 불러옴 */
INPUT mon ip; /* mon, ip 변수에 데이터를 입력할 것임 */
logip=LOG(ip); /* ip 값에 자연 로그(ln)을 취함 */
/* ip의 성장률을 바꾸는 Logic */
ipg=DIF(logip)*1200; /* 연간 퍼센트 성장률 > 12*100=1200 */
ipg1=LAG(ipg); /* ipg 변수를 한 시점씩 밀어줌 */
RUN;
DATA fyff;
INFILE '/home/u63329964/mydata/fyff.prn'; /* mydata 디렉토리의 fyff.prn 파일을 불러옴 */
INPUT mon fyff; /* mon, fyff 변수에 데이터를 입력할 것임 */
fyff4=LAG4(fyff); /* fyff 변수를 한 시점씩 밀어줌 */
RUN;
DATA unemp;
INFILE '/home/u63329964/mydata/unemp.prn'; /* mydata 디렉토리의 unemp.prn 파일을 불러옴 */
INPUT mon unemp; /* mon, unemp 변수에 데이터를 입력할 것임 */
dunemp=DIF(unemp)*10; /* 월간 변화량에 10을 곱하여 조정 */
RUN;
DATA all;
MERGE ip fyff unemp;
BY mon; /* mon 변수를 기준으로 병합 */
IF mon<19590101 OR mon>20191201 THEN DELETE;
num=__N__;
RUN;
/* regression 1 */
PROC REG DATA=all;
/* regression model 1-1: DW Test 진행 */
MODEL ipg=fyff4 dunemp / DWPROB;
/* regression model 1-2 */
MODEL ipg=fyff4 dunemp ipg1;
/* regression 결과 Residual(R)=reisd로 표기하여
이를 DATA 바구니 out1에 담는다. */
OUTPUT OUT=out1 R=resid;
RUN;
DATA all;
/* out1 DATA 바구니를 all DATA 테이블에 담는다. */
SET out1;
resid1=LAG(resid); /* residual을 한 시점씩 밀어줌 */
RUN;
/* regression 2 */
PROC REG DATA=all;
/* regression model */
MODEL resid=resid1 fyff4 dunemp ipg1;
RUN;
사용한 Data의 기간은 1959년 1월~2019년 12월로 코로나 위기 기간을 제외하였다. (총 732개) 종속변수에 시차가 존재하지 않는 모형과 존재하는 회귀 모형을 모두 작성하여 프로그램을 작성하였으며, 각각의 회귀 모형을 분석한 결과는 아래와 같다.
가장 먼저 사용한 회귀 모형은 1기 전의 종속변수인 ipg1이 회귀식에 포함되지 않았기에 DW d Test를 사용할 수 있다. 해당 모형에서 DW d Test를 하여 ipg의 오차항에 있는 자기상관 정도를 측정한 결과는 위 사진과 같다.
1st Order Autocorrelation 값은 0.129로, 양의 상관관계가 존재함을 확인할 수 있다. 이에 따라 $pr < DW$ 값을 살펴보면 0.0002로 0.05보다 작기 때문에 귀무가설 "$\alpha=0$, 오차항(error term)에 자기상관이 존재하지 않는다."를 기각할 수 있다.
해당 model은 종속변수 ipg에 시차가 존재하기 때문에 DW d Test를 수행할 수 없다. 따라서 Durbin's h Test를 진행해야 한다. Durbin's h Test를 진행한 결과는 이어서 설명할 예정이다.
resid1의 parameter 추정치는 -0.38617, t value는 -4.82로 1.98보다 훨씬 큰 값이며, P value는 0.05보다 훨씬 작은 값이므로 귀무가설 "$\alpha=0$, 오차항(erorr term)에 자기상관이 존재하지 않는다."를 기각할 수 있다.
이때, resid1과 ipg1의 parameter 추정치 값은 각각 -0.38617, 0.30913, t value 값은 각각 -4.82, 4.24로 부호가 반대라고 할 수 있다. 이러한 regression 결과는 "다중공선성(multicollinearity)"이 초래한 통계적 결과라고 추측할 수 있다.
(해당 링크에서 다중공선성 문제를 조금 더 자세히 다루고 있으니 개념 필요하신 분들은 참고하시기 바랍니다.)
/* regression 1 */
PROC REG DATA=all;
/* regression model */
MODEL ipg=fyff4 dunemp ipg1 / DWPROB;
/* regression 결과 Residual(R)=reisd로 표기하여
이를 DATA 바구니 out1에 담는다. */
OUTPUT OUT=out1 R=resid;
RUN;
DATA all;
/* out1 DATA 바구니를 all DATA 테이블에 담는다. */
SET out1;
resid1=LAG(resid); /* residual을 한 시점씩 밀어줌 */
RUN;
/* regression 2 */
PROC REG DATA=all;
MODEL resid = resid1 fyff4 dunemp ipg1; /* regression model 2-1 */
MODEL resid1 = ipg1; /* regression model 2-2 */
MODEL resid = resid1; /* regression model 2-3 */
MODEL resid = resid1 ipg1; /* regression model 2-4 */
RUN;
다중공선성 문제를 관찰하기 위하여 위의 실습 코드에서 데이터 처리 부분은 유지한 채 회귀 분석 부분만 해당 코드로 바꾸어 실습을 진행하였다. 이 코드를 추가하여 실습을 진행한 결과는 아래와 같다.
resid1을 종속 변수로, ipg1을 독립 변수로 하여 단순 회귀 분석을 한 결과 R-Square 값은 0.7799로 매우 크고 ipg1의 parameter 추정치는 0.77976, t value는 50.82로 꽤 큰 값이 나왔다. 해당 결과를 바탕으로 독립 변수 간 다중공선성 문제가 있음을 확인할 수 있다.
위의 두 가지 회귀 모형을 설정하여 분석 결과를 비교하였다. 분석 결과는 아래와 같다.
model 2-3의 경우 독립 변수가 resid1 하나만 포함되었다. 이 모델에서는 resid1이 다른 설명 변수와 높은 상관관계를 가지지 않으므로 다중공선성 문제가 발생하지 않는다는 것을 확인할 수 있다. resid1의 parameter 추정치와 t value는 각각 -0.07962, -2.16이다.
model 2-4의 경우 model 2-3에 독립 변수 ipg1이 추가되었다. 이 모델에서는 resid1과 ipg1 사이에 높은 상관관계로 인하여 다중공선성 문제가 초래되는 것을 확인할 수 있다. 실제 분석 결과, resid1의 parameter 추정치와 t value는 각각 -0.36255, -4.66이다. 이는 다중공선성이 존재하지 않을 때의 추정치보다 약 4.55배, t value보다 2배에 달하는 수치라고 할 수 있다. 즉, 다중공선성은 다중공선성을 초래하는 변수들의 parameter 추정치와 t value를 왜곡할 수 있는 문제를 가져온다고 할 수 있다.
DATA ip;
INFILE '/home/u63329964/mydata/ip.prn'; /* mydata 디렉토리의 ip.prn 파일을 불러옴 */
INPUT mon ip; /* mon, ip 변수에 데이터를 입력할 것임 */
logip=LOG(ip); /* ip 값에 자연 로그(ln)을 취함 */
/* ip의 성장률을 바꾸는 Logic */
ipg=DIF(logip)*1200; /* 연간 퍼센트 성장률 > 12*100=1200 */
ipg1=LAG(ipg); /* ipg 변수를 한 시점씩 밀어줌 */
RUN;
DATA fyff;
INFILE '/home/u63329964/mydata/fyff.prn'; /* mydata 디렉토리의 fyff.prn 파일을 불러옴 */
INPUT mon fyff; /* mon, fyff 변수에 데이터를 입력할 것임 */
fyff4=LAG4(fyff); /* fyff 변수를 한 시점씩 밀어줌 */
RUN;
DATA unemp;
INFILE '/home/u63329964/mydata/unemp.prn'; /* mydata 디렉토리의 unemp.prn 파일을 불러옴 */
INPUT mon unemp; /* mon, unemp 변수에 데이터를 입력할 것임 */
dunemp=DIF(unemp)*10; /* 월간 변화량에 10을 곱하여 조정 */
RUN;
DATA all;
MERGE ip fyff unemp;
BY mon; /* mon 변수를 기준으로 병합 */
IF mon<19540701 OR mon>20231201 THEN DELETE;
num=__N__;
RUN;
/* regression 1 */
PROC REG DATA=all;
/* regression model 1-1: DW Test 진행 */
MODEL ipg=fyff4 dunemp / DWPROB;
/* regression model 1-2 */
MODEL ipg=fyff4 dunemp ipg1;
/* regression 결과 Residual(R)=reisd로 표기하여
이를 DATA 바구니 out1에 담는다. */
OUTPUT OUT=out1 R=resid;
RUN;
DATA all;
/* out1 DATA 바구니를 all DATA 테이블에 담는다. */
SET out1;
resid1=LAG(resid); /* residual을 한 시점씩 밀어줌 */
RUN;
/* regression 2 */
PROC REG DATA=all;
/* regression model */
MODEL resid=resid1 fyff4 dunemp ipg1;
RUN;
사용한 Data의 기간을 2020년 Covid-19 기간을 포함하는 2023년 12월까지 확장하였다. 이번에는 해당 기간을 포함하지 않는 경우에 비하여 포함한 경우에는 각각의 회귀 모형에 어떤 변화가 있을지 관찰해 보려 한다. 각각의 회귀 모형을 분석한 결과는 아래와 같다.
앞선 프로그램과 마찬가지로 가장 먼저 사용한 회귀 모형은 1기 전의 종속변수인 ipg1이 회귀식이 포함되지 않았다. 따라서 DW d Test를 하여 ipg의 오차항에 있는 자기상관 정도를 측정하였으며, 해당 결과는 위 사진과 같다.
1st Order Autocorrelation 값은 0.150으로, 양의 상관관계가 존재함을 확인할 수 있다. 이에 따라 Durbin-Watson D 값은 1.699이며, $pr<DW$ 값은 0.05보다 작기 때문에 귀무가설 "$\alpha=0$, 오차항(error term)에 자기상관이 존재하지 않는다."를 기각할 수 있다.
해당 model 역시 종속 변수 ipg에 시차가 존재하기 때문에 DW d Test를 수행할 수 없다.
이때 수행한 DW d Test는 종속변수 ipg에 시차가 존재하기 때문에 실효성이 없는 잘못된 Test라고 할 수 있다. 그럼에도 불구하고 위 사진의 결과를 살펴보면 Durbin-Watson D 값은 2.010이며, $pr<DW$ 값은 0.05보다 크기 때문에 귀무가설을 기각할 수 없다. 즉, ipg1의 존재가 오차항(error term)의 자기상관을 크게 제거하고 있음을 확인할 수 있다. Durbin's h Test 분석 결과는 이어서 설명할 예정이다.
resid1의 parameter 추정치는 -0.01066, t value는 -0.20로 절댓값이 1.98보다 작으며, P value는 0.05보다 크므로 귀무가설 "$\alpha=0$, 오차항(error term)에 자기상관이 존재하지 않는다."를 기각할 수 없다.
Data의 기간을 코로나 시기를 포함하도록 2023년 12월까지 연장했을 때와 코로나 기간을 포함하지 않았을 때의 Durbin's h Test 결과는 다르다는 것을 확인할 수 있다. 그러나 두 번째 회귀 모형에 resid1과 ipg1이 여전히 독립 변수로 존재하기 때문에 두 변수의 parameter 추정 값과 t value의 절댓값이 유사하게 나오는 것을 두 경우 모두 확인할 수 있다.
[ SAS ] 비선형 회귀 모형의 추정 (0) | 2024.12.17 |
---|---|
[ SAS ] 이분산 (Heteroscedasticity) (2) | 2024.12.16 |
[ SAS ] Durbin's h Test (0) | 2024.10.19 |
[ SAS ] Durbin-Watson(DW) d Test (0) | 2024.10.16 |
[ SAS ] - 자기상관성(Autocorrelation) (0) | 2024.10.07 |
댓글 영역