상세 컨텐츠

본문 제목

[ SAS ] 실제 DATA를 사용하여 DW d Test+Durbin's h Test 진행하는 프로그램 작성

Language/SAS

by bing_su 2024. 10. 21. 09:47

본문

반응형
SMALL

저번 실습까지는 가상의 Data를 이용하여 생성된 회귀 모형을 분석했다. 이번 실습에서는 실제 Data를 이용하여 DW d Test와 Durbin's h Test를 하는 실습을 진행해보려 한다. 필요한 통계 개념은 이미 이전 게시물들에서 다루었기 때문에 현재 게시물에서는 다루지 않는다. 통계 개념이 필요한 경우 아래의 링크를 참고하면 된다.

- DW d Test: https://bing-su-b.tistory.com/134

 

[ SAS ] Durbin-Watson(DW) d Test

이전 게시물에서 오차항에 자기상관(autocorrelation)이 있는 경우에 대해 살펴봤다. 그와 더불어 오차항에 자기상관이 있는지 여부를 테스트하는 방법에 대해서는 추후 다룬다고 했는데, 이번 게시

bing-su-b.tistory.com

- Durbin's h Test: https://bing-su-b.tistory.com/135

 

[ SAS ] Durbin's h Test

이전 게시물에서 오차항(error term)이 자기상관을 가지는지 검정하는 방법인 Durbin-Watson(DW) d Test에 대해 다뤘다. 이때 이전 시점의 종속 변수가 현재 시점의 종속 변수에 영향을 미치는 회귀 모형

bing-su-b.tistory.com

 

실습에 사용될 Data는 FRED에서 다운로드했다. 데이터 전처리 과정은 해당 게시물에서 다루었기 때문에 생략한다. 이 과정에 대한 설명이 필요한 경우 하이퍼링크를 참고하면 된다.

 

실습에 사용된 각각의 파일 이름에 해당하는 실제 데이터는 아래와 같다.

  • ip.prn: industrial production. 분기(quarter) 마다 발표되는 GDP의 월별 수치
  • fyff.prn: federal funds rate. U.S. Federal Reserve에서 은행들에 현금을 빌려줄 때 받는 이자율.
  • unemp.prn: unemployment rate. 실업률

[ 실제 데이터를 사용하여 회귀 분석을 하는 프로그램 - 코로나 기간 제외 ]

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-(1) 회귀 모형: $ipg = \beta_1 + \beta_2 fyff4 + \beta_3 dunemp + u$

1-(1) 회귀모형 분석 결과

가장 먼저 사용한 회귀 모형은 1기 전의 종속변수인 ipg1이 회귀식에 포함되지 않았기에 DW d Test를 사용할 수 있다. 해당 모형에서 DW d Test를 하여 ipg의 오차항에 있는 자기상관 정도를 측정한 결과는 위 사진과 같다.

 

1st Order Autocorrelation 값은 0.129로, 양의 상관관계가 존재함을 확인할 수 있다. 이에 따라 $pr < DW$ 값을 살펴보면 0.0002로 0.05보다 작기 때문에 귀무가설 "$\alpha=0$, 오차항(error term)에 자기상관이 존재하지 않는다."를 기각할 수 있다.

- 1-(2) 회귀 모형: $ipg=\beta_1 +\beta_2 fyff4 + \beta_3 dunemp + \beta_4 ipg1 + u$

해당 model은 종속변수 ipg에 시차가 존재하기 때문에 DW d Test를 수행할 수 없다. 따라서 Durbin's h Test를 진행해야 한다. Durbin's h Test를 진행한 결과는 이어서 설명할 예정이다.

- 두 번째 회귀 모형: $e_t=\gamma_0 + \gamma_1 e_{t-1} + \gamma_2 fyff4 + \gamma_3 dunemp + \gamma_4 ipg1 + \nu_t$

두번째 회귀모형 분석 결과

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)"이 초래한 통계적 결과라고 추측할 수 있다.

(해당 링크에서 다중공선성 문제를 조금 더 자세히 다루고 있으니 개념 필요하신 분들은 참고하시기 바랍니다.)

- 독립 변수 resid1, ipg1 간의 다중공선성 문제 관찰

/* 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;

 

다중공선성 문제를 관찰하기 위하여 위의 실습 코드에서 데이터 처리 부분은 유지한 채 회귀 분석 부분만 해당 코드로 바꾸어 실습을 진행하였다. 이 코드를 추가하여 실습을 진행한 결과는 아래와 같다.

※ regression model 2-2: MODEL resid1=ipg1; 분석 결과

다중공선성 문제를 관찰하기 위한 회귀모형 분석 결과

resid1을 종속 변수로, ipg1을 독립 변수로 하여 단순 회귀 분석을 한 결과 R-Square 값은 0.7799로 매우 크고 ipg1의 parameter 추정치는 0.77976, t value는 50.82로 꽤 큰 값이 나왔다. 해당 결과를 바탕으로 독립 변수 간 다중공선성 문제가 있음을 확인할 수 있다.

※ 다중공선성이 발생하지 않는 경우 vs 다중공선성이 발생하는 경우

  • regression model 2-3: MODEL resid=resid1;
  • regression model 2-4: MODEL resid=resid1 ipg1;

위의 두 가지 회귀 모형을 설정하여 분석 결과를 비교하였다. 분석 결과는 아래와 같다.

regression model 2-3 (좌) / regression model 2-4 (우) 분석 결과 비교

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-(1) 회귀 모형: $ipg=\beta_1 + \beta_2 fyff4 + \beta_3 dunemp + u$

1-(1) 회귀모형 분석 결과

앞선 프로그램과 마찬가지로 가장 먼저 사용한 회귀 모형은 1기 전의 종속변수인 ipg1이 회귀식이 포함되지 않았다. 따라서 DW d Test를 하여 ipg의 오차항에 있는 자기상관 정도를 측정하였으며, 해당 결과는 위 사진과 같다.

 

1st Order Autocorrelation 값은 0.150으로, 양의 상관관계가 존재함을 확인할 수 있다. 이에 따라 Durbin-Watson D 값은 1.699이며, $pr<DW$ 값은 0.05보다 작기 때문에 귀무가설 "$\alpha=0$, 오차항(error term)에 자기상관이 존재하지 않는다."를 기각할 수 있다. 

- 1-(2) 회귀 모형: $ipg=\beta_1 +\beta_2 fyff4 + \beta_3 dunemp+\beta_4 ipg1+u$

해당 model 역시 종속 변수 ipg에 시차가 존재하기 때문에 DW d Test를 수행할 수 없다.

1-(2) 회귀모형 분석 결과

이때 수행한 DW d Test는 종속변수 ipg에 시차가 존재하기 때문에 실효성이 없는 잘못된 Test라고 할 수 있다. 그럼에도 불구하고 위 사진의 결과를 살펴보면 Durbin-Watson D 값은 2.010이며, $pr<DW$ 값은 0.05보다 크기 때문에 귀무가설을 기각할 수 없다. 즉, ipg1의 존재가 오차항(error term)의 자기상관을 크게 제거하고 있음을 확인할 수 있다. Durbin's h Test 분석 결과는 이어서 설명할 예정이다.

- 두 번째 회귀 모형: $e_t=\gamma_0 + \gamma_1 e_{t-1}+\gamma_2 fyff4 +\gamma_3 dunemp + \gamma_4 ipg1+\nu_t$

두번째 회귀모형 분석 결과

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의 절댓값이 유사하게 나오는 것을 두 경우 모두 확인할 수 있다.

반응형
LIST

'Language > SAS' 카테고리의 다른 글

[ 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

관련글 더보기

댓글 영역