회귀모형의 오차항에 조건부이분산이 존재할 경우 회귀모형의 계수들만 추정할 때보다 오차항의 조건부이분산 모형도 함께 추정하면 계수추정효율(parameter effiency)가 높아집니다.
계수추정효율을 높일 수 있는 방법은 계수추정치의 표준오차(Standard Error)가 작아지는 것 입니다.
조건부이분산모형은 여러 종류의 '불확실성(uncertainty)'을 과학적으로 측정하는 방법을 제공할 뿐 아니라 일반 회귀모형의 계수추정의 추정효율(estimation effiency)도 높입니다.
또한, 조건부이분산을 반영하여 조건부이분산 계수들도 함께 회귀모형을 추정하면 오차항의 AR1 계수 추정치의 통계적 유의성이 사라집니다.
이번 게시글은 조건부이분산이 없는 경우와 있는 경우 계수추정 결과를 비교해보겠습니다.
사용할 데이터는 fyff (the U.S Federal funds interest rate로 미국 연방기금 금리에 대한 자료, 첫번째 칼럼은 날짜 _ yyyymmdd , 두번째 칼럼은 미국 연방 금리) , ip ('monthly industrial production(산업생산)의 연간 성장률' 데이터로 첫번째 칼럼은 날짜 _ yyyymmdd, 두번째 칼럼은 산업생산의 연간 성장률), S&P500 ( 미국의 주가지수로 첫번째 칼럼은 날짜 _ yyyymmdd, 두번째 칼럼은 미국 주가지수), UNEMP(실업률 데이터)를 사용합니다.
fyff - 미국 연방기금 금리
ip - 산업생산의 연간 성장률
s&p - 미국의 주가지수
unemp - 실업률 데이터
S&P 500 수익률을 조건부이분산을 국가경제적 불확실성 변수로 설정하고, ipg - 산업생산성장률을 회귀모형에 추가하여 회귀분석을 실행합니다.
data sp500;
infile '/home/u45061472/sp500.prn';
input mon sp;
logsp=log(sp);
spg=dif(logsp)*1200;
if mon < 19590101 then
delete;
num=_N_;
run;
data ip;
infile '/home/u45061472/ip.prn';
input mon ip;
logip=log(ip);
ipg=dif(logip)*1200;
if mon > 19590101 then
delete;
if mon < 20120801 then
delete;
run;
data data fyff;
infile '/home/u45061472/fyff.prn';
input mon fyff;
fyff4=lag4(fyff);
if mon < 19590101 then
delete;
if mon > 20120801 then
delete;
run;
data unemp;
infile '/home/u45061472/unemp.prn';
input mon unemp;
dunemp=dif(unemp);
run;
data all;
merge sp500 ip fyff unemp;
by mon;
run;
proc autoreg data=all;
model spg=fyff / method=ml maxiter=200 archtest;
model spg=fyff / method=ml maxiter=200 garch=(q=1, p=1);
output out=out1 cev=ht;
run;
data all;
set out1;
st=sqrt(ht);
run;
s&p 500, ip, fyff, unemp 데이터를 사용합니다.
proc autoreg 명령문에서 GARCH(1,1) 모형에서 얻은 '시차에 따라 변화하는 조건부이분산(TIME-VARYING CONDITIONAL HETEROSCEDASTICITY)"를 변수 ht라고 지정하였습니다.
SAS의 조건부이분산 이름은 CEV (Conditional Error Varience)이며, CEV = ht 는 사용자가 조건부이분산 변수의 이름을 ht라고 지정한 것 입니다. 또한, ht가 들어 있는 데이터 바구니 out1를 데이터 바구니 all에 담으라는 명령어입니다.
ht에 sqrt를 씌워 오차항 ut 의 제곱으로 만들어진 변수입니다.
proc gplot data=all;
plot spg*num=1 st*num=2 / overlay;
symbol1 v=none i=join c=blueviolet;
symbol2 v=star i=join c=crimson;
run;
PROC GPLOT 은 플로팅(plotting) 하는 명령으로 PROC PLOT 과는 달리 SYMBOL 옵션을 사용하여 다양한 그림을 그릴 수 있습니다.
PLOT 명령어를 사용하여 실제 플롯을 그릴 수 있는 명령으로 Y축(세로축) 변수와 X축(가로축) 변수를 사용합니다. X축은 num 변수로 num은 자연수 1, 2, 3, ... , n 으로 샘플 수에 자연수를 붙인 것이며 이 자연수 행렬의 마지막 숫자는 총 샘플의 수로 644개가 됩니다. 2개의 변수 플로팅을 서로 덮어 씌울 수 있는 명령어 / OVERLAY; 옵션을 사용하였습니다.
SYMBOL 명령문은 플롯을 그릴 때 데이터포인트를 구체적인 사인으로 표시하지 말라는 옵션입니다.
V = None, Star, Plus 등 기호로 표현할 수 있습니다.
i = Interpolation으로 데이터 값과 데이터 값 사이 즉 * 와 * 또는 + 와 + 사이를 연결해야 하는지를 의미하고
i = join은 연결하지 말라는 옵션입니다. C = Color로 플로팅시 값을 주는 옵션으로 사용합니다.
GPLOT의 결과를 보면 두 개의 PLOT을 OVERLAY 옵션을 이용하여 한 개의 그래프로 겹쳐서 그린 결과를 볼 수 있습니다. 보라색이 S&P 500 지수의 연간 % 수익률을 나타내고, 빨간색은 조건부이분산의 루트값 (st) 값을 나타냅니다. 즉, S&P 500 지수의 연간 % 수익률에서 얻은 조건부이분산의 루트(Square Root) 값으로 S&P 500 지수의 연간 % 수익률 변동에 담겨있는 '불확실성 수치'를 나타냅니다.
위의 PLOT에서 보라색과 빨간색을 비교해보면 굵고 짙은 빨간색이 보라색의 변동성을 잘 나타내고 있습니다.
특히, S&P 500 연간 퍼센트(percent) 주식수익률 346번째는 1987년 10월 값으로 -300에 근접한 -294.514로 가장 큰 폭으로 하락한 값을 보여줍니다. 1987년 10월 19일 Black Monday와 뒤이은 20일의 주가하락으로 급격한 하강이 보입니다.
1987년 10월 조건부이분산 st 값은 51.971이었으나, 11월에 115.462 로 치솟은 후 12월 113.172, 그 다음해는 1988년 1월 107.663, 1988년 2월 100.156으로 서서히 하락합니다.
proc autoreg data=all;
model ipg = fyff4 dunemp st / nlag=1 method=ml maxiter=200 archtest;
model ipg = fyff4 dunemp st / nlag=1 method=ml maxiter=200 garch=(q=1, p=1);
run;
위의 코드는
종속변수 - ipg
설명변수 - fyff4, dunemp, st
로 설정하고 회귀모형을 최우추정법(MLE)를 사용하여 추정하라는 명령어입니다.
이 추정모형을 사용한 이유는 GARCH(1,1) 옵션이 없는 줄에서의 추정결과와 GARCH(1,1) 이 있는 아래의 줄의 추정결과와 비교하기 위함입니다.
종속변수를 ipg로 하였을 때도 조건부이분산이 존재한다는 검정결과가 있기 때문에 회귀모형추정 시에 조건부이분산 GARCH(1,1)을 추가하지 않았을 때와 추가했을 때의 결과가 어떻게 다른지를 비교하고 분석하기 위해 두 개의 회귀모형을 추정하였습니다. 조건부이분산의 존재를 파악하고 그 모형으로 GARCH(1,1) 를 사용하여 추정하였을 때 설명변수 fyff3, dunemp, st의 추정치가 어떻게 변화하는지 살펴보면 됩니다.
위의 결과는 아래의 코드에서 나온 것입니다.
model ipg = fyff4 dunemp st / nlag=1 method=ml maxiter=200 archtest;
위 회귀분석 결과에서 볼 수 있듯이 설명변수 계수 추정치가 - (음수)로 나왔으며, t 값들은 3개 모두 통계적으로 유의미하게 나왔습니다. 특히, 불확실성을 나타내는 설명변수인 st의 t 의 절대값이 fyff4의 t 값 절대치보다 더 크게 나와 불확실성 변수가 산업생산증가률에 연방정부 이자율보다 더 중요하다는 것을 잘 보여주고 있습니다.
민간 실업률(dunemp)을 1차 차분한 변수인 dunemp 의 t 값은 - 0.807로 연방펀드 이자율의 4개월 전 변수 fyff4 t 값의 3배가 넘는 값이어서 종속변수 ipg를 설명하는 회귀모형에 상당히 중요한 변수입을 확인할 수 있습니다.
또한, ARCHTEST를 사용하여 산업생산성장률 (ipg), 종속변수의 오차항에 이분산의 존재여부를 알아보았습니다.
그 결과, LM 검정통계치와 그 확률값 Pr > LM은 아래와 같습니다.
위에서 볼 수 있듯이 Pr > LM 값은 1에서 12까지 전체 오더(order)에 걸쳐 확률값이 모두 < .0001입니다.
그러므로 산업생산성장률 ipg를 종속변수로 하는 회귀모형의 오차항에 이분산이 존재하지 않는다는 귀무가설을 강하게 기각되고 있습니다.
이 결과를 반영하여 그 아래에 있는 코드로 GARCH = (q = 1, p=1)을 추가하여 회귀분석을 진행하였고 그 결과는 아래와 같습니다.
조건부이분산 계수들인 ARCH0, ARCH1, GARCH1 추정치들은 모두 양수이고
Approx Pr > | t | 값들이 모두 < .0001 으로 통계적으로 매우 유의하다는 것을 알 수 있습니다.
여기서 ARCH0 는 γ0 , ARCH1은 γ1, GARCH δ1으로 위의 식 계수들의 추정치를 나타냅니다.
이번에는 ipg를 종속변수로 하는 회귀모형의 오차항에 조건부이분산이 존재하고, 회귀모형의 계수들 fyff4, dunemp 와 동시에 조건부이분산 계수들을 추정하였을 때 예측할 수 있는 추정효율성(Estimation Effiency)의 증가를 검정하기 위해 Estimate, Standard Error, Approx Pr > | t | 를 비교해보겠습니다.
[ 조건부이분산이 없는 ipg 회귀모형 추정결과 ]
[ 조건부이분산 GARCH = (q = 1, p = 1)이 있는 ipg 회귀모형 추정결과 ]
위의 표는 ipg를 종속변수로 하고, fyff4, dunemp, st를 설명변수로 하는 회귀모형의 오차항에 AR (1)만을 추가하여 최우추정법으로 추정한 결과이다.
fyff4 계수의 추정치는 GARCH (1,1)를 추가하지 않았을 때의 값인 - 0.3651에서 - 0.3432 로 절대값이 약간 작아졌습니다.
dunemp 계수 추정치는 -16.7317에서 GARCH(1,1)을 추가하ㅕㅆ을 때는 -14.0666 로 바뀌어 16% 정도 절대값이 하락하는 것을 볼 수 있습니다.
이러한 계수추정지들의 변화는 회귀식 오차항에 GARCH(1,1)을 추가함으로 우도함수 (Likelihood Funcion)가 달라지며 그 변화된 우도함수를 극대화시키는 과정에서 추정치도 달라지게 되는 것입니다.
중요한 것은 표준오차 (Standard Error)의 비교입니다.
조건부이분산 없이 추정한 절편 추정치의 표준오차는 1.4454로 17.83% 하락하였습니다.
즉, GARCH (1,1)을 추가함으로써 절편의 추정이 더 효율적으로 정확하게 개선됨을 알 수 있습니다.
회귀모형의 오차항에 조건부이분산이 존재할 경우 그 조건부이분산 모형을 구체적으로 반영하고 추정하면, 회귀모형의 계수추정 효율성이 증가하여 계수추정치의 표준오차 Standard Error가 작아진다는 것을 실증분석을 통해 확인할 수 있습니다.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!