상세 컨텐츠

본문 제목

[ SAS ] - 다중공선성(Multicollinearity)

Language/SAS

by bing_su 2023. 6. 16. 14:25

본문

반응형
SMALL

저번 시간까지는 단순 회귀 모형을 분석하는 프로그램을 살펴봤다. 이번 실습 시간에는 작성한 프로그램에서 회귀 분석 시 발생할 수 있는 문제인, 다중공선성을 관찰해 볼 것이다.
 
프로그램을 작성하기 이전에, 프로그램 분석에 필요한 통계 개념인 다중공선성에 대해 짚고 넘어가려고 한다.

[ 다중공선성(Multicollinearity) ]

다중공선성 문제(Multicollinearity)는 회귀 분석에서 독립변수들 간에 강한 상관관계가 나타나는 문제다.

1. 완전공선성(perfect multicollinearity)

회귀모형 $Y_i=\alpha+\beta_1 X_1i+\beta_2 X_2i+\varepsilon_i$에서 두 독립 변수(설명 변수)가 완전한 선형 관계($X_1i=\lambda X_2i, \lambda \neq 0)$인 경우를 말한다.
k 개의 독립 변수(설명 변수)를 포함한 회귀모형에서는 독립 변수 간의 관계가 $\lambda_1 X_1+\lambda_2 X_2+\cdots+\lambda_k X_k=0$의 경우에 독립 변수 간에 완전공선성이 나타난다고 한다. 독립 변수 사이에 완전공선성이 나타나는 경우에는 OLS를 통해 회귀 계수를 추정할 수 없다.

2. 다중공선성(multicollinearity)

회귀모형에서 독립 변수(설명 변수) 간에 완전공선성은 나타나지 않지만, 변수 사이의 상관관계가 높게 나타날 때 다중공선성(multicollinearity)을 가진다고 한다. 다중공선성은 존재하더라도 CA(Classical Assumption)의 어떤 것도 위반하지 않기 때문에, 회귀 모형의 OLS 추정치는 여전히 BLUE(Best Linear Unbiased Estimator)하다. 하지만, 다중공선성이 존재하는 모형의 경우에는, 계수 추정치가 참값과 크게 차이가 난다.

- 다중공선성(multicollinearity) 확인

  1. 높은 $R^2$ 값과 낮은 t 값(=높은 P 값)을 가지는 경우
    이 경우에는 각 독립 변수(설명 변수)들의 종속 변수에 대한 설명력은 높지만, 각 계수 추정치의 표준 오차가 매우 크다는 것을 의미한다. (참고: t 값이 크다=통계적으로 유의하다.=귀무가설과 유의한 차이가 존재한다.) 이는 독립 변수(설명 변수) 간에 다중공선성이 높을 때 나타나는 현상이다.
  2. 독립 변수(설명 변수)들 간의 상관 계수가 클 때(0.9 이상)
    상관 계수에 대해서는 추후에 설명할 기회가 있으면 할 것.
  3. 분산팽창지수(VIF$=\frac{1}{1-R^2}$: Variance Inflation Factor)가 10 이상일 때

- 다중공선성(multicollinearity) 해결

  1. 다중공선성 유발 변수를 제거
    가장 일반적인 해결 방법이다. 하지만 독립 변수(설명 변수)를 제거했을 때 설정 오류(specification error)가 발생하여 문제가 더 악화될 수 있다. 특히 경제이론 등에 근거하여 회귀 모형에서 중요한 역할을 하는 경우라면, 단순히 다중공선성 문제로 변수를 제거하는 것은 지양하는 것이 바람직하다.
  2. 1의 경우를 피하기 위한 해결 방법: 표본 수를 늘린다.
    표본 수가 적어질수록 다중공선성 효과가 확대된다. 다중공선성의 경우, 기본적으로 Data 문제다. 따라서 가능한 많은 데이터를 얻는 것이 다중공선성 문제를 완화시킬 수도 있다.

※ Specification Error

  • $Consumption_t=\beta_1+\beta_2 Income_t+\beta_3 Wealth_t+u_t$
    : 분석하기에 올바른 model이지만 다중공선성 문제 발생
  • $Consumption_t=\beta_1+\beta_2 Income_t+u_t$
    : 분석에 필요한 독립 변수(설명 변수)가 빠져서 부적절한 model. 다중공선성 문제는 발생 X.

종종 Specification error는 다중공선성 문제(Multicollinearity Problem)보다 더 심각할 수 있다.

- 다중공선성을 가진 model 예시: $Y_t=\beta_1+\beta_2 X_{2t}+\beta_3 X_{3t}+u_t$

  • $Y_t=$industrial production growth rate, mothly(ipg. 월별 산업생산 성장률)
  • $X_{2t}=$the Federal funds rate, monthly(fyff. 월별 연방기금 금리)
  • $X_{3t}=$monthly 3 month Treasury bill rate: Secondary Market Rate
    (fygm3. 월 별 3개월의 2차 시장(Secondary Market)에서의 미국 단기국채(Treasury bill) 금리)

회귀 모형에서 $X_{2t}, X_{3t}$는 금리기 때문에 이 두 변수는 높은 상관관계를 가져야 한다. 즉, 두 변수 사이에는 하나의 독립 변수는 다른 하나의 독립 변수로 잘 예측되는 공선성(collinearity)을 가진다. 따라서 두 변수 사이에는 다중공선성(multicollinearity)이 발생한다. 회귀 모형을 분석하면 실제 결정 계수(R-Square) 값은 0.9792로 계산된다.

$X_{3t}=\gamma_1+\gamma_2 X_{2t}+\nu_t$

$X_{2t}, X_{3t}$가 위와 같은 관계를 가질 때 이 모형의 결정 계수(R-Square) 값은 1.0이 된다. 이는 $\beta_2, \beta_3$의 추정치인 $b_2, b_3$가 다중공선성의 존재에 의해 상당한 영향을 받는다는 것을 확인할 수 있다.
 
이번에는 프로그램 작성 시에 ip.prn 파일과 fyff.prn 파일 외에, fygm3.prn 파일을 활용할 것이다. ip.prn/fyff.prn 파일을 다운로드하는 방법은 이 링크를 참고하면 된다. fygm3.prn 역시 아래 사이트에 있는 파일을 활용하여 생성할 것이다.
실습에 사용된 site: https://fred.stlouisfed.org/

 

Federal Reserve Economic Data | FRED | St. Louis Fed

Welcome to FRED, your trusted source for economic data since 1991. Download, graph, and track 822,000 US and international time series from 110 sources. Welcome to FRED, your trusted source for economic data since 1991. Download, graph, and track 822,000 U

fred.stlouisfed.org

(1) 컴퓨터에 \mydata\ 디렉토리 생성: 생략(이전 게시글에 씀)

(2) FRED 사이트에서 DATA FILE 다운로드

우리가 실습을 위하여 다운로드 받아야 할 파일은 "3-Month Treasury Bill Secondary Market Rate, Discount Basis"다.

검색창에 찾고자 하는 파일명 입력
찾고자 하는 파일(3-Month Treasury Bill Secondary Market Rate, Discount Basis) 클릭
DOWNLOAD > Excel(data) 클릭

위의 사진 순서대로 다운로드를 받아주면 된다.

(3) 데이터 파일 편집

파일을 설명하는 문자행 삭제

파일에 대한 설명이 있는 문자행을 shade 하여 삭제하자.

날짜가 적힌 열 shade&"표시 형식" 오른쪽 아래 작은 화살표 클릭

날짜가 적힌 열을 shade 한다. A에 커서를 대고 클릭하면 A열이 모두 shade 된다. 그 이후에서는 "표시 형식" 메뉴에서 오른쪽 작은 아래 화살표 부분을 클릭하자.

날짜 형식 사용자 지정

"표시 형식"을 누르면 위와 같이 셀 서식을 지정할 수 있다. 사용자 지정 > yyyy-mm-dd 선택 > "yyyy-mm-dd"에서 hyphen(-) 2개를 삭제하는 과정을 거치면 이제 이 파일을 사용할 준비가 된 것이다.

파일 저장

F12를 누르면 파일을 다른 이름으로 저장할 수 있다. 파일 형식(T)을 "텍스트(공백으로 분리)"로 선택하고, 파일 이름(N) fygm3를 입력하여 "저장"을 하자. (/mydata/ 디렉터리는 이미 생성되어 있어야 함.)

(4) SAS Cloud에 DATA FILE Upload

mydata 폴더에 파일 업로드

SAS Cloud에 mydata 폴더를 생성하는 방법은 이전에 설명했으니 넘어간다. (이 게시물을 참고하세요.)

파일 선택 > prn 파일 업로드

파일 선택을 누르면 내 컴퓨터 디렉터리가 화면으로 뜨게 된다. 업로드할 데이터가 저장된 디렉터리(\mydata\)로 가서 fygm3.prn 파일을 클릭하여 업로드를 하면 실제 DATA를 분석할 준비가 끝났다.

[ 다중공선성을 관찰하는 프로그램 ]

/* ip.prn & fyff.prn 파일의 DATA를 추출하는 Logic은 이전에 설명한 부분이라 생략함 */
/* 기억 잘 안 나시는 분들은 https://bing-su-b.tistory.com/109 ㄱ-ㄱ */
DATA ip;
	INFILE '/home/u63329964/mydata/ip.prn';
	INPUT mon ip;
	logip=LOG(ip);
	ipg=DIF(logip)*1200;
    /* 1959년 이전 삭제. 코로나 포함 X. */
	IF mon<19590101 OR mon>20200101 THEN DELETE;
RUN;

DATA fyff;
	INFILE '/home/u63329964/mydata/fyff.prn';
	INPUT mon fyff;
	fyff4=LAG4(fyff);
    /* 1959년 이전 삭제. 코로나 포함 X. */
	IF mon<19590101 OR mon>20200101 THEN DELETE;
RUN;

DATA fygm3;
	INFILE '/home/u63329964/mydata/fygm3.prn';  /* mydata 디렉토리의 fygm3.prn 파일을 불러옴 */
	INPUT mon fygm3;  /* mon, fygm3 변수에 데이터를 입력할 것임. */
	fygm34=LAG4(fygm3);  /* 4달 전 값을 fygm3 변수로 정의 */
    /* 1959년 이전 삭제. 코로나 포함 X. */
	IF mon<19590101 OR mon>20200101 THEN DELETE;
RUN;

DATA all;
	MERGE ip fyff fygm3;
	BY mon;  /* mon 변수를 기준으로 병합 */
	num=_N_;
RUN;
/* regression */
PROC REG DATA=all;
	MODEL ipg=fyff4 fygm34;  /* regression model 1 */
	MODEL fygm3=fyff;  /* regression model 2 */
RUN;
/* plotting */
PROC GPLOT DATA=all;
	PLOT fyff4*num fygm34*num /OVERLAY;  /* fyff4*num fygm34*num 그림을 겹쳐 그림(OVERLAY Option) */
	SYMBOL1 V=STAR I=JOIN C=RED;  /* fyff4*num에 사용하는 SYMBOL Setting */
	SYMBOL2 V=DOT I=JOIN C=BLUE;  /* fygm34*num에 사용하는 SYMBOL Setting */
RUN;
QUIT;  /*SAS Code 마지막에 PROC GPLOT을 하면 PLOT을 2번 함. 이를 방지하기 위해 QUIT 사용 */

해당 프로그램에서 사용할 데이터는 fyff(the Federal funds rate, monthly. 미국 월별 연방기금 금리), ipg(industrial production growth rate, monthly. 월별 산업생산 성장률), fygm3(monthly 3 month Treasury bill rate: Secondary Market Rate. 3개월에서 월 별 2차 시장(Secondary Market)에서의 미국 단기국채(Treasury bill) 금리), 그리고 세 데이터를 날짜를 기준으로 merge한 데이터이다. 이 프로그램은 해당 데이터를 가지고 회귀 분석을 진행했다. 분석에 대한 내용을 살펴보며 다중공선성에 대해 설명하고자 한다.

1. PROC REG 결과 1: MODEL ipg=fyff fygm3

$ipg_t=\beta_1+\beta_2 fyff_t+\beta_3 fygm3_t+u_t$ 모형의 회귀 분석을 수행한다. 이 모형에 대한 회귀 분석 결과는 아래와 같이 확인할 수 있다.

MODEL ipg=fyff fygm3의 Regression Procedure 결과

다중공선성을 살펴보기 위해 fyff4와 fygm34의 parameter 추정치를 살펴보려고 한다. fyff4의 추정치는 -5.25275인 반면, fygm34의 추정치는 5.75168이다. 거의 동일한 이자율 독립 변수(설명 변수)들의 추정치가 상반되는 부호인 것이다.

2. PROC REG 결과 2: MODEL fygm3=fyff

$fygm3_{2t}=\gamma_1+\gamma_2 fyff_t+\nu_t$ 모형의 회귀 분석을 수행한다. 이 모형에 대한 회귀 분석 결과는 아래와 같이 확인할 수 있다.

MODEL fygm3=fyff의 Regression Procedure 결과

두 독립 변수(설명 변수)의 상관관계를 살펴보기 위해 종속 변수를 fygm3로 설정하고, 독립 변수를 fyff로 하여 회귀 분석을 수행했다. 이때, R-Square는 0.9792로 1.0에 근접한다. 즉, fyff가 fygm3를 97.92%만큼 설명한다고 할 수 있고, 이는 fygm3와 fyff가 거의 같은 데이터라는 것을 알 수 있다.

3. PLOT fyff4*num fygm34*num /OVERLAY

plotting - fyff4*num &amp; fygm34*num OVERLAY

num 변수는 mon 변수의 일련 번호라고도 할 수 있다. 즉, 해당 GPLOT Procedure 결과는 시기에 따른 fyff4, fyff34 값을 나타낸 산점도라고 할 수 있다. 실제 산점도에서 fyff4와 fygm34는 유사한 분포를 가진다. 즉, fyff와 fygm3는 거의 같은 데이터라고 볼 수 있다.

[ 다중공선성을 관찰하는 프로그램 - 글로벌 금융 위기 이후 ]

/* ip.prn & fyff.prn 파일의 DATA를 추출하는 Logic은 이전에 설명한 부분이라 생략함 */
/* 기억 잘 안 나시는 분들은 https://bing-su-b.tistory.com/109 ㄱ-ㄱ */
DATA ip;
	INFILE '/home/u63329964/mydata/ip.prn';
	INPUT mon ip;
	logip=LOG(ip);
	ipg=DIF(logip)*1200;
    /* 글로벌 금융 위기 이후부터 코로나 이전까지 포함. */
	IF mon<20090401 OR mon>20200101 THEN DELETE;
RUN;

DATA fyff;
	INFILE '/home/u63329964/mydata/fyff.prn';
	INPUT mon fyff;
	fyff4=LAG4(fyff);
    /* 글로벌 금융 위기 이후부터 코로나 이전까지 포함. */
	IF mon<20090401 OR mon>20200101 THEN DELETE;
RUN;
/* fygm3.prn 파일의 DATA를 추출하는 Logic은 위쪽에서 설명한 부분이라 생략. */
DATA fygm3;
	INFILE '/home/u63329964/mydata/fygm3.prn';
	INPUT mon fygm3;
	fygm34=LAG4(fygm3);
    /* 글로벌 금융 위기 이후부터 코로나 이전까지 포함. */
	IF mon<20090401 OR mon>20200101 THEN DELETE;
RUN;

DATA all;
	MERGE ip fyff fygm3;
	BY mon;  /* mon 변수를 기준으로 병합 */
	num=_N_;
RUN;
/* regression */
PROC REG DATA=all;
	MODEL ipg=fyff4 fygm34;  /* regression model 1 */
	MODEL fygm3=fyff;  /* regression model 2 */
RUN;
/* plotting */
PROC GPLOT DATA=all;
	PLOT fyff4*num fygm34*num /OVERLAY;  /* fyff4*num fygm34*num 그림을 겹쳐 그림(OVERLAY Option) */
	SYMBOL1 V=STAR I=JOIN C=RED;  /* fyff4*num에 사용하는 SYMBOL Setting */
	SYMBOL2 V=DOT I=JOIN C=BLUE;  /* fygm34*num에 사용하는 SYMBOL Setting */
RUN;

PROC PRINT DATA=all;
	/* mon num fygm3 fyff 변수를 불러와서 PRINT Procedure 실행 */
	VAR mon num fygm3 fyff;
RUN;

이번에는 바로 직전에 실습한 프로그램에서 기간만 글로벌 금융 위기 이후부터 코로나 이전까지로 바꿔서 회귀 분석을 진행했다. 이번에도 해당 분석 결과에 대해 살펴보며 다중공선성에 대해 설명하고자 한다.

MODEL ipg=fyff fygm3의 Regression Procedure 결과 비교

이번에도 다중공선성을 살펴보기 위해 fyff4와 fygm34의 parameter 추정치를 살펴봤다. 다만, 직전 프로그램과의 비교를 통해 다중공선성의 정도를 비교하려고 한다. 직전 프로그램은 1959년 1월 1일 이후부터 코로나 전까지 733개의 표본으로 얻은 DATA이고, 위의 결과는 글로벌 금융 위기 이후부터 코로나 전까지 130개의 표본으로 얻은 DATA이다.
 
DATA가 733개인 경우 추정치는 fyff4, fyff34의 추정치는 각각 -5.25275, 5.75168이었으나, 글로벌 금융 위기 이후 DATA가 130개인 경우 추정치는 fyff4, fyff34의 추정치는 각각 -15.34431, 13.85507로 크게 변화한다. 일단 표본의 수가 줄어들었기 때문에 다중공선성이 심해진 것을 확인할 수 있다.

mon num fygm3 fyff
20090401 1 0.16 0.15
20110401 25 0.06 0.09
20151001 79 0.02 0.12
20160201 83 0.31 0.38
20170701 100 1.07 1.15
20180801 113 2.03 1.91
20190301 120 2.4 2.41

표는 해당 프로그램의 샘플에서 특정 시기의 관측값(fygm3, fyff)을 나타낸 것이다. 해당 표에서 확인할 수 있듯이 글로벌 금융 위기 이후, 즉 2009년 4월 이후 2016년 2월까지는 fyff와 fygm3 0.5% 미만을 유지했다. 이로 인해 독립 변수(설명 변수) fyff와 fygm3 금리가 매우 작은 값으로 전환되어 parameter의 추정치의 절댓값은 커짐을 알 수 있다.

MODEL fygm3=fyff의 Regression Procedure 결과 비교

이번에도 두 독립 변수(설명 변수)의 상관관계를 살펴보기 위해 종속 변수를 fygm3로 설정하고, 독립 변수를 fyff로 하여 회귀 분석을 수행했다. 다만, 이번에도 직전 프로그램과의 바교를 통해 두 독립 변수의 상관관계를 비교하려고 한다. 먼저 DATA가 733개인 경우 R-Square 값은 0.9792, DATA가 130개인 경우에는 R-Square 값이 0.9921임을 확인할 수 있다. 일단 표본의 수가 줄어든 만큼 두 변수 간의 상관관계가 커진 것을 확인할 수 있다. 즉, 다중공선성이 더 심해졌다고 할 수 있다.
 
또한, DATA가 733개인 경우 회귀 모형의 기울기 추정치는 0.85129이나, 글로벌 금융 위기 이후 DATA가 130개인 경우에는 회귀 모형의 기울기 추정치가 1.02106으로 증가한 것을 확인할 수 있다. 즉, 글로벌 금융 위기 이후 fyff 이자율 대비 fygm3 이자율은 더 커졌음을 확인할 수 있다.

plotting - fyff4*num &amp; fygm34*num OVERLAY

num 변수는 mon 변수의 일련번호라고도 할 수 있다. 즉, 해당 GPLOT Procedure 결과는 시기에 따른 fyff4, fygm34 값을 나타낸 산점도라고 할 수 있다. 직전 프로그램과 마찬가지로 실제 산점도로부터 fyff4와 fygm34는 유사한 분포를 가짐을 확인할 수 있다. 즉, fyff와 fygm3는 거의 같은 데이터라고 볼 수 있다.

반응형
LIST

관련글 더보기

댓글 영역