상세 컨텐츠

본문 제목

[ SAS ] 비선형 회귀 모형의 추정

Language/SAS

by bing_su 2024. 12. 17. 03:47

본문

반응형
SMALL

지금까지는 선형 회귀 모형을 OLS 방식으로 분석하는 방법에 대하여 다뤘다. 이번 게시물부터는 비선형(Nonlinear) 회귀 모형의 parameter를 추정하는 방법에 대하여 다루고 실습을 진행해 보려고 한다.

 

프로그램을 작성하기에 앞서, 프로그램 분석에 필요한 통계 개념을 짚고 넘어가자.

[ 오차항(Error Term)의 자기상관(Autocorrelation) 처리 ]

앞선 게시물에서 AR(1) model에서 오차항(error term)의 자기상관(autocorrelation)을 처리하는 방법으로 오차항을 백색 잡음(White noise)으로 만드는 과정을 다뤘다. 해당 과정의 핵심 부분을 정리하면 다음과 같다. (자세한 모형 설명은 해당 링크를 참고하시면 됩니다.)

$Y_t -\alpha Y_{t-1}=(\beta_1 - \alpha \beta_1 ) + \beta_2 X_t -\alpha \beta_2 X_{t-1} +(u_t -\alpha u_{t-1})$

$Y_t =(\beta_1 -\alpha \beta_1 )+\beta_2 X_t -\alpha \beta_2 X_{t-1}+\alpha Y_{t-1}+\varepsilon_t$

(∵ $\varepsilon_t =u_t -\alpha u_{t-1}$)

위의 과정을 거친 회귀식의 오차항은 $\varepsilon_t$가 되어 Classical Assumption 3번째를 만족하게 된다. 그러나 해당 모형은 더 이상 선형 회귀 모형이 아니다. 식에서 $\alpha \beta_1$, $\alpha \beta_2$가 회귀 모형을 비선형(nonlinear)으로 만들기 때문에 우리가 지금까지 이용한 OLS(Ordinary Least Squares) 방식으로 parameter들을 추정하는 것은 불가능하다.

 

따라서 비선형(nonlinear) 회귀 모형의 parameter들을 추정할 수 있는 Nonlinear Least Squares(NLS) 방식을 사용하여 parameter를 추정해야 한다. 앞서 다뤘던 Procedure MODEL을 사용하여 비선형 회귀 모형을 추정하고 이분산성을 검정해 볼 것이다. 해당 개념에 대한 복습이 필요하다면 이전 게시물을 읽고 오도록 하자.

[ NLS 방식을 사용하여 Nonlinear Model을 추정하는 프로그램 ]

- 가상 데이터를 생성하여 분석

DATA ex;
	seed1=12;
	seed2=34;
	seed3=56;
	seed4=78;
	alpha=0.3;  /* 회귀 계수 설정 */
	beta1=10.0;  /* 절편 설정 (true value) */
	beta2=0.1;  /* 기울기 설정 (true value) */
	ylag=RANNOR(seed1);  /* 이전 시차를 기억하는 종속 변수 생성*/
	xlag=RANNOR(seed2);  /* 이전 시차를 기억하는 독립 변수 생성 */
	ulag=RANNOR(seed3);  /* 오차항 생성 */
	
	DO i=1 TO 200 BY 1;
		x = i;  /* 독립 변수 값 */
		u = alpha*ulag + RANNOR(seed4);  /* 오차항끼리 자기상관관계 존재 */
		y = beta1 + beta2*x + u;  /* 종속 변수 값 */
		OUTPUT;  /* DO LOOP 내부 변수 값들을 모두 기억 */
		ylag=y;  /* y의 이전 시점 값 저장 */
		xlag=x;  /* x의 이전 시점 값 저장 */
		ulag=u;  /* u의 이전 시점 값 저장 */
	END;
RUN;
/* regression 1 */
PROC REG DATA=ex;
	/* regression model */
	MODEL y=x / DWPROB;  /* DWPROB Option을 활용하여 DW Test 진행 */
	MODEL y=x xlag ylag;  /* 이전 시점의 값을 포함한 회귀 모형 분석 */
	OUTPUT OUT=out1 R=resid;
	/* regression 결과 Residual(R)=resid로 표기하여 
	이 변수를 DATA 바구니 out1에 담는다. */
RUN;

DATA ex;
	/* out1 DATA 바구니를 ex DATA 테이블에 담는다. */
	SET out1;
	resid1=LAG(resid);  /* residual을 한 시점씩 밀어줌 */
RUN;
/* regression 2 */
PROC REG DATA=ex;
	/* residual의 autocorrelation을 검정하는 regression model */
	MODEL resid=resid1;
RUN;
/* regression 3 */
PROC MODEL DATA=ex;
	PARMS alpha beta1 beta2;  /* 절편과 회귀 계수 설정 */
	/* 비선형 구조의 regression model 설정 */
	y=(1-alpha)*beta1+beta2*x-alpha*beta2*xlag+alpha*ylag;
	xsq=x*x;  /* x의 제곱항 생성 */
	FIT y / WHITE BREUSCH=(1 xsq);  /* White Test와 Breusch-Pagan Test 수행 */
RUN;

 

오차항(error term)에 존재하는 자기상관성(autocorrelation)이 선형 회귀 모형(linear regression model)을 비선형 회귀 모형(nonlinear regression model)로 변형시키는 것을 가상의 데이터로 확인하는 프로그램이다. 해당 프로그램 실행 결과를 나타내면 아래와 같다.

- 회귀 모형 1: $Y_t = \beta_1 +\beta_2 X_t +u_t$

회귀 모형 1 분석 결과

무작위로 생성된 200개의 데이터를 사용하여 parameter $\beta_1=10.0$과 $\beta_2=0.1$을 추정한 결과이다. $\beta_1$의 추정치는 9.84574이고, $\beta_2$의 추정치는 0.10142이다. 오차항에 존재하는 자기상관성에 의해 t Value는 왜곡되었으나, 선형 회귀 모형이기 때문에 추정치 자체는 true value에 상당히 가깝다는 것을 확인할 수 있다.

 

오차항에 존재하는 자기상관성을 검정하기 위해 실시한 Durbin-Watson d Test 결과를 분석해보자.

  1. 1st Order Autocorrelation 값은 0.387로 양의 자기상관이 존재함을 시사한다.
  2. 1에 따라 $pr<DW$ 값을 분석하면 0.001보다 작으며 이 값은 0.05보다 훨씬 작은 값이다.
    귀무가설을 기각할 수 있음. 즉, 오차항 간에는 양의 자기상관이 존재한다.

- 회귀 모형 2: $Y_t =(\beta_1 -\alpha \beta_1 )+\beta_2 X_t -\alpha \beta_2 X_{t-1} +\alpha Y_{t-1} + \varepsilon_t$

비선형 회귀 모형의 parameter를 OLS 방식으로 추정한 결과부터 살펴보자.

회귀 모형 2 OLS 분석결과

  • $\beta_1 -\alpha \beta_1 =10-0.3 \times 10=7$ 추정치: 12.07916
  • $\beta_2 =0.1$ 추정치: -5.93599
  • $\alpha \beta_2 =0.3 \times 0.1=0.03$ 추정치: 5.99791
  • $\alpha=0.3$ 추정치: 0.38836

parameter들끼리 연산을 수행한 추정치들은 true 값과 꽤 큰 차이를 보이고 있다는 것을 확인할 수 있다. 즉, 비선형 회귀 모형을 선형 회귀 모형처럼 생각하여 parameter를 추정하고자 할 경우에는 큰 오류가 발생할 수 있다.

 

이제 비선형 회귀 모형의 parameter를 Procedure MODEL을 이용하여 NLS 방식으로 추정한 결과를 살펴보자.

회귀 모형 2 NLS 분석 결과

  • $\alpha=0.3$ 추정치: 0.290938
  • $\beta_1 =10$ 추정치: 9.932133
  • $\beta_2 =0.1$ 추정치: 0.100809

해당 추정치들의 t Value가 매우 큰 편이긴해도 true 값에 가까운 값으로 도출된다는 것을 확인할 수 있다. 이분산(heteroscedasticity)을 검정할 때도 이 true 값을 반영하고 있다.

 

한편 White Test와 Breusch-Pagan Test 결과 P Value가 0.05보다 크기 때문에 귀무가설인 등분산성(homoscedasticity)이 존재한다는 것을 기각하지 못한다. 생성된 회귀 모형의 오차항에는 Durbin-Watson Test를 통해 자기상관이 존재한다는 사실을 검정할 수 있었으나, 이분산은 존재하지 않는다는 것을 White Test와 Breusch-Pagan Test를 통해 알 수 있다.

- 실제 데이터를 사용하여 분석

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 unemp;
	INFILE '/home/u63329964/mydata/unemp.prn';  /* mydata 디렉토리의 unemp.prn 파일을 불러옴 */
	INPUT mon unemp;  /* mon, unemp 변수에 데이터를 입력할 것임 */
	dunemp=DIF(unemp)*10;  /* 월간 변화량에 10을 곱하여 조정 */
	dunemp1=LAG(dunemp);  /* dunemp 변수를 한 시점씩 밀어줌 */
	dunempsq=dunemp*dunemp;  /* dunemp 변수를 제곱 */
RUN;

DATA all;
	MERGE ip unemp;
	BY mon;  /* mon 변수를 기준으로 병합 */
	IF mon<19590101 OR mon>20191201 THEN DELETE;
	num=__N__;
RUN;
/* regression 1 */
PROC REG DATA=all;
	MODEL ipg=dunemp / DWPROB;
	/* regression 결과 Residual(R)=resid로 표기하여
    이를 DATA 바구니 out1에 담는다. */
	OUTPUT OUT=out1 R=resid;
	MODEL ipg=dunemp dunemp1 ipg1;
RUN;

DATA all;
	/* out1 DATA 바구니를 all DATA 테이블에 담는다. */
	SET out1;
	resid1=LAG(resid);  /* residual을 한 시점씩 밀어줌 */
	resq=resid*resid;  /* 잔차 제곱을 resq로 저장 */
RUN;
/* regression 2 */
PROC REG DATA=all;
	/* Breusch-Pagan Test를 위한 변수의 적합성 확인 */
	MODEL resq=dunemp dunempsq;
RUN;
/* regression 3 */
PROC MODEL DATA=all;
	PARMS alpha beta1 beta2;  /* 절편과 회귀 계수 설정 */
	/* 비선형 구조의 regression model 설정 */
	ipg=(1-alpha)*beta1 + beta2*dunemp + alpha*beta2*dunemp1 + alpha*ipg1;
	FIT ipg / WHITE BREUSCH=(1 dunempsq);  /* White Test와 Breusch-Pagan Test 수행 */
RUN;

 

앞서 여러 번 사용했던 산업생산성장률(ipg)과 실업률(unemp)의 실제 데이터를 사용하여 비선형 회귀 모형을 추정하고자 한다. 가상 데이터의 경우와 마찬가지로 OLS와 NLS를 모두 사용하여 결과를 비교해 볼 예정이다. 해당 프로그램 실행 결과를 나타내면 아래와 같다.

- 회귀 모형 1: $ipg=\beta_0 +\beta_1 dunemp + u$

회귀 모형 1 분석결과

독립 변수가 실업률 $unemp$를 1차 차분한 $dunemp$ 하나인 단순 회귀 모형이다. $dunemp$의 parameter 추정치는 -2.20657, 이 때의 t Value는 -12.15로 매우 크다. 즉, 귀무가설 $\beta_1 =0$을 강하게 기각하고 있기 때문에 dunemp 변수는 ipg 변수를 매우 잘 설명하고 있음을 알 수 있다. 

 

한편 오차항에 존재하는자기상관성을 검정하기 위하여 실시한 Durbin-Watson d Test 결과를 살펴보자.

  1.  1st Order Autocorrelation 값은 0.124로 양의 자기상관이 존재함을 시사한다.
  2. 1에 따라 $pr<DW$ 값을 분석하면 0.0003이고, 이는 0.05보다 작은 값이다.
    귀무가설을 기각할 수 있다. 즉, 오차항 간에는 양의 자기상관이 존재한다.

- 회귀 모형 2: $Y_t =(\beta_1 -\alpha \beta_1 )+\beta_2 X_t-\alpha \beta_2 X_{t-1}+\alpha Y_{t-1}+\varepsilon_t$

비선형 회귀 모형의 parameter를 OLS 방식으로 추정한 결과부터 살펴보자.

회귀 모형 2 OLS 분석 결과

  • $\beta_1 -\alpha \beta_1$ 추정치 2.04300
  • $\beta_2$ 추정치: -1.77765
  • $\alpha \beta_2 $ 추정치: -1.06761
  • $\alpha$ 추정치: 0.15534 

위에서 나온 결과를 통해 parameter 추정치에 오차가 존재하는지 살펴보자.

$\alpha=\frac{\alpha \beta_1}{\beta_1}=\frac{-1.06761}{-1.77765}=0.60057$

그러나 실제 $\alpha$의 추정치는 0.15534이다. 따라서 비선형 회귀 모형을 선형 회귀 모형처럼 생각하여 parameter를 추정하고자 할 경우에는 큰 오류가 발생할 수 있다. 

 

이제 비선형 회귀 모형의 parameter를 Procedure MODEL을 이용하여 NLS 방식으로 추정한 결과를 살펴보자. 

회귀 모형 2 NLS 분석 결과

  • $\alpha$ 추정치: 0.232736
  • $\beta_1$ 추정치: 2.434773
  • $\beta_2$ 추정치: -1.80264

실제 true 값에 가깝게 추정된 parameter인지 확신은 할 수 없지만, 회귀 모형 1과 유사하게 추정이 되었다는 것을 확인할 수 있다. 이분산(heteroscedasticity)을 검정할 때도 해당 값이 반영된다.

 

한편 White Test와 Breusch-Pagan Test 결과 p Value가 0.05보다 훨씬 작기 때문에 귀무가설인 등분산성(homoscedasticity)이 존재한다는 것이 기각되고 있다. 즉, 생성된 회귀 모형의 오차항에는 Durbin-Watson Test를 통하여 자기상관이 존재한다는 사실을 검정할 수 있으며, White Test와 Breusch-Pagan Test를 통해 이분산이 존재한다는 사실 또한 파악할 수 있다.  

반응형
LIST

관련글 더보기

댓글 영역