회귀분석모형들은 여러 학문분야에서 많이 사용되는 모형이고 통계학자들과 경제학자들에 의해 적절한 모형설정 방법과 모형의 계수추정 방법에 대해 많은 진전과 발전이 있어 왔습니다.
회귀모형 계수추정 방법에 있어 많은 발전이 있어 정교해지고 일반화 되었습니다.
하지만 회귀모형을 이용하였을 때 단점은 회귀모형을 이용하여 종속변수의 미래값을 예측(forecasting)하기가 대부분의 경우 거의 불가능합니다.
시계열모형을 이용한 미래예측은 쉽고, 단기예측이든 장기예측이든 어려움 없이 할 수 있습니다. 시계열분석방법이 활용되는 큰 이유는 미래예측의 용이성이 있다고 볼 수 있습니다. 많은 거시경제 데이터들은 회귀분석에 이용하다보면 오차항에 매우 높은 자기상관성이 있다는 것을 자주 발견하게 되었습니다. 오차항의 자기상관성은 종속변수의 과거값들을 추가함으로써 대부분 제거할 수 있습니다.
즉, 오차항의 자기상관성은 종속변수가 시계열모형으로도 잘 표현될 수 있다는것을 증거하는 것이라고 볼 수 있습니다.
아래의 표는 회귀모형과 시계열모형의 장점과 단점을 비교한 표로 연구자의 목적에 따라 사용 모형을 결정할 수 있습니다.
연구의 목적에 따라 모형 선택이 이루어집니다.
시계열모형은 특정분야의 이론이나 직감을 사용하여 결정되는 것이 아니고 오로지 데이터의 자기상관함수(AutoCorrelation Function, ACF) 에 의해 결정되기 때문에 자기상관함수에 대해 많은 지식이 요구되기도 합니다.
시계열 모형은 종종 AutoRegressive (AR) 모형과 Moving Average (MA) 모형, 그리고 이 둘의 복합적인 모형인 AutoRegressive Moving Average(ARMA) 모형으로 구분됩니다.
AR 모형 중에 가장 단순한 모형인 AR(1) 모형은 아래 식 (1)과 같이 표기할 수 있습니다.
여기서 et는 백색잡음(white noise)입니다.
여기서 Yt 의 평균값은 아래의 식과 같습니다.
분석을 용이하게 하기위해서 m = 0으로 가정합니다. 즉, 분석에 편리한 AR(1) 모형은 다음과 같이 표기하여 사용하기로 합니다.
먼저 | a | < 1 으로 제약을 두는 것은 Yt 시계열 안정성(Stationary) 를 보장히기 위함입니다.
data artif;
seed1 = 12;
seed2 = 14;
alpha = 0.9;
ylag = rannor(seed1);
do i = 1 to 500;
e = rannor(seed2);
y = alpha*ylag + e;
output;
ylag = y;
end;
run;
seed1은 SAS의 무작위 생성함수 rannor( ) 에 들어가는 값을 지정하는 명령입니다.
위의 코드를 보면 500개의 데이터를 생성하기 위해 DO문을 LOOP를 사용하였습니다.
Yt-1 를 ylag로 지정하였고 DO Loop i = 1 일 때, y = alpha *ylag + e 줄에 있는 ylag 값이 없다고 error가 발생하게 됩니다. ylag 값을 지정할 때 인위적인 값, 예를 들면 0과 같은 값을 피아기 위해서 무작위로 추출된 값, Rannor(seed1)을 사용하였습니다.
또한, e = RANNOR(seed2)는 et (White Noise, 백색잡음) 값을 얻기 위한 명령어입니다.
OUTPUT 명령어는 DO LOOP 에서 발생하는 모든 값들을 기억하라는 명령어입니다. 이 명령어가 없다면 DO LOOP 가 500번 돌면서 생성한 데이터 중 마지막에 생성한 데이터 하나만 기억하고 있게됩니다. 그러므로 500개의 자료를 만들기 위해서는 OUTPUT 명령어가 필수적입니다.
ylag = y 명령어는 DO LOOP 끝나는 end; 명령어 바로 위에 ylag 값을 업데이트 해주는 명령어입니다. 업데이트가 안되면 제대로된 AR 데이터를 만들 수 없습니다.
proc gplot data = artif;
plot y*i;
symbol v=none i=join c=cornflowerblue;
run;
proc gplot 명령어를 사용해서 plot을 그려보았습니다.
가로축에는 Yt, 세로축에는 i 를 지정하였습니다.
V는 Value의 약자이고 NONE은 데이터 포인트에 별표 (*) 나 플러스 (+) 등으로 표시하지 말라는 명령어입니다.
i = Join은 Interpolation 의 약자로 데이터와 데이터 사이를 서로 연결하고 JOIN 하라는 명령어입니다.
C는 Color의 약자로 해당 색상을 사용하여 plot을 그렸습니다.
AR(1) 모형, a = 0.5
AR(1) 모형, a = 0.9
시계열적 특성을 살펴보기 위해 alpha 값을 0.5와 0.9로 설정하여 살펴보겠습니다.
alpha 값이 증가하질수록 샘플 값의 persistency 또는 지속성이 증가하는 것을 알 수 있습니다.
즉, Yt 값이 한번 증가하기 시작하면 몇 번에 걸쳐 계속 증가하는 경향이 있고, 반대로 한 번 감소하기 시작하면 몇 번에 걸쳐 계속 감소하는 경향이 있다는 것을 알 수 있습니다.
alpha 값이 0이 되면 Yt 값은 White Noise 가 되어 Yt 값과 Yt - 1 값은 전혀 상관이 없는 즉, 지속성이 전혀 없는 시계열자료가 됩니다.
AR(2) 모형은 아래의 식과 같이 표기됩니다.
AR(2) 모형은 AR(1) 모형보다 계수가 하나 더 있는 모형이지만 이 모형의 자기상관함수를 직접 구하는 것은 시간이 걸립니다. 그래서 이 모형에 대한 ACF를 구하는 대신 코딩으로 생성된 AR(2) 데이터를 통해 ACF 형태를 확인하고자 합니다. AR(2) 의 PACF 는 AR(1) 과 비슷할 것이나 두 번째 부분자기상관(Partial AutoCorrelation) 값이 통계적으로 유의해야 합니다. 그러므로 AR(2) 모형의 PACF 는 대부분 두 개의 PACF 가 통계적으로 유의하게 돌출되어 나와있습니다.
AR(2) 모형에 대해서는 우선, AR(2) 데이터 생성에 필요한 프로그램을 작성하여 미래예측 방법을 중심으로 설명하고자 합니다.
아래의 코드는 a1 = 0.6 , a2 = 0.3으로 가정하고 AR(2) 데이터를 생성하고 생성된 데이터를 AR(2) 모형으로 추정하는 프로그램은 아래와 같습니다.
data ar2;
seed1 = 12; seed2 = 14; seed3 = 16;
alpha1 = 0.6; alpha2 = 0.3;
ylag1 = rannor(seed1); ylag2 = rannor(seed2);
do i = 1 to 500;
e = rannor(seed3);
y = alpha1*ylag1 + alpha2*ylag2 + e;
output;
ylag2 = ylag1;
ylag1 = y;
end;
run;
proc gplot data = ar2;
plot y*i;
symbol v=none i=join c=deeppink;
run;
proc arima data=ar2;
identify var= y;
estimate p = 2 q= 0 method=ml maxit=200 noint;
forecast lead=12;
run;
AR(1)의 모형에서는 seed1과 seed2만 있었는데 AR(2) 모형의 데이터를 생성하기 위해서 seed가 3개가 필요합니다. AR(2) 의 계수 값들(parameter values) alpha1과 alpha2 를 각 0.6과 0.3 으로 지정하였습니다.
참고로, 두 계수값들의 합이 1 미만이어야 시계열 자료의 안정성을 확보할 수 있습니다. AR(2) 모형의 오른쪽에는 Yt 의 과거들이 2개, Yt-1 과 Yt - 2 가 있기 때문에 ylag 값들도 ylag1과 rannor(seed1)과 rannor(seed2) 로 설정하였습니다. 이는 DO Loop 시작 전에 필요합니다.
y = alpha1*ylag1 + alpha2*ylag2 + e;
위의 코드는 AR(2)를 표현한 코드입니다.
ylag2 = ylag1;
ylag1 = y;
위의 코드는 업데이팅 줄로 DO LOOP를 한바퀴 돌 때마다 ylag1 과 ylag2 값들을 업데이트 해야됩니다.
ylag2를 업데이트하고 ylag1를 그 다음으로 업데이트 시켜줬습니다. 이 순서가 뒤바뀌면 ylag1 = ylag2 = y가 되어 AR(2) 데이터를 생성할 수 없게 됩니다.
위는 proc gplot의 결과입니다.
AR(1) 그림과는 약간 다르게 지속성(consistency)가 약간 덜합니다.
추측해보면 AR(2) 모형의 ar1 계수값은 0.6 이고, AR(1) 모형의 ar 계수값은 0.9로 AR(2) 의 ar1 계수값보다 작아서 발생하는 현상이라고 판단됩니다.
결론으로는, AR(1) 플롯과 AR(2) 플롯을 구분하는 것은 쉽지 않습니다. 특히, 모형의 계수값들에 큰 차이가 없을 때 더욱 그런 것 같습니다.
아래 Y 변수에 대한 백색잡음 검정결과를 보면 모든 LAG에서 Pr > Chi-Sq 값들이 0.05 보다 훨씬 작은 < .0001 입니다. Chi-Square 값들도 1000이 넘고 2000에 가까워지고 있습니다. 이 결과는 당연한 것이지만 AR(2) 로 생성한 데이터가 백색잡음이 절대 아니라는 증거를 제시하고 있습니다.
Trend and Correlation Analysis for y 에서 AR(2)로 생성된 데이터를 이용하여 얻은 4개의 플롯이 있습니다. 이 플롯들은 PROC ARIMA의 Identify VAR = y; 가 도출해 낸 결과들입니다.
첫 번째 플롯은 proc gplot 으로 위에서 그린 plot 의 축소판이고, ACF 플롯은 위 AR(1) 의 ACF 플롯하고 다르다는 것을 알 수 있습니다.
AR(2)의 ACF 플롯은 LAG 가 증가하면서 거의 직선으로 감소하는 형태를 보이고 있습니다. 즉, Lag가 증가하면서 자기상관의 감소속도가 AR(1)의 ACF 플롯보다 더 느립니다.
PACF (Partial AutoCorrelation Function) 플롯을 보면 예측한 바와 같이 음영처리된 0을 중심으로 한 95%가 신뢰구간 밖으로 튀어나온 바는 첫 번째 바와 두 번째 바 2개로 y2 변숭의 데이터가 AR(2) 시계열모형으로 생성됐음을 보여주고 있습니다. PACF와 비슷하게 IACF(Inverse ACF) 플롯에도 2개의 바가 95% 신뢰구간 밖에 존재하는 것을 볼 수 있습니다.
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!