본문 바로가기
카테고리 없음

[STATA] 시계열 평활

by e-money2580 2023. 2. 6.
반응형


** 시계열 데이터의 4가지 요소 : trend, cycle, seasonal, error
/* 
추세 : 지속적으로 감소 또는 증가하려는 경향. 시간에 따라 추세가 변화할 수 있음.
순환 : 평균을 중심으로 진동하는 패턴. (경기순환 = 경기 호황 및 불황)
계절성 : 1년 중 특정 한 시점에 예측 가능한 방향으로 증가 또는 감소하는 경향
오차 : 예측불가능하고 부작위적인 요소

시계열 데이터 예측 = 적합(fitting) + 잔차(residual)

시계열 데이터 적합(fitting)을 위한 방법으로 모형을 사용하거나 평활화(smooting)를 할 수 있음

** 평활화(smooting)
평활화는 시계열 데이터를 복제 가능한 방법을 찾는 것 = 표본의 수가 적어서 모형에 근거한 방법이 적절치 않은 경우 사용
= 미리 정해 노은 방식을 적용하여 시계열 데이터에서 적합(fitting)에 해당하는 부분을 찾는 방법
*/


** 이동평균 평활 : 과거 값에 동일한 가중치를 주어 과거값을 평균한 값으로 현재값을 대신

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_1.dta", clear

tsset month

tssmooth ma ma1 = rawtrend, window(4 0) // 과거 4기간 평균값 사용(현재값 사용하지 않음)
/*
The smoother applied was
     (1/4)*[x(t-4) + x(t-3) + x(t-2) + x(t-1) + 0*x(t)]; x(t)= rawtrend
*/

tssmooth ma ma2 = rawtrend, weights(1 <2> 1) // t-1기에 가중치1, t기에 가중치2, t+1기에 가중치1
/*
The smoother applied was
     (1/4)*[1*x(t-1) + 2*x(t) + 1*x(t+1)]; x(t)= rawtrend
*/

list in 1/5
/*
     +-----------------------------------------+
     |  month   rawtrend        ma1        ma2 |
     |-----------------------------------------|
  1. | 1960m2       3.11          .   4.851923 |
  2. | 1960m3       8.34   3.106918   5.966715 |
  3. | 1960m4       4.08   5.724426   3.445086 |
  4. | 1960m5      -2.71   5.174975   .0348698 |
  5. | 1960m6       1.49   3.202797   2.246967 |
     +-----------------------------------------+
*/

tsline rawtrend ma*


** 이동평균 평활을 이용한 예측 

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_1.dta", clear

tsset month
tssmooth ma ma1 = rawtrend, window(4 0) // 과거 4기간 평균값 사용(현재값 사용하지 않음)
tsappend, add(5) // 표본외 5기간 추가
di ym(1965,1) // 60 // 표본내 마지막 기간 시계열 변수 값 확인
gen ma1_pred=rawtrend

forvalues i=61/65 {
replace ma1_pred=1/4*(l.ma1_pred+l2.ma1_pred+l3.ma1_pred+l4.ma1_pred) if month==`i'
}
// 과거 4기 값을 이용하여 단순이동평균한 값을 예측치로 사용

replace ma1=ma1_pred if month>=ym(1965,2)

tsline rawtrend ma1 if month>=ym(1963,1)

 



** 지수평활 : 과거값에 지수 가중치를 적용하여 현재값을 대신


** 단순지수평활법
use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_2.dta", clear

tsset month

tssmooth exponential exp1 = rawcycle, parms(0.3) // 알파 값을 0.3으로 지수평활
/*
exponential coefficient  =       0.3000
sum-of-squared residuals =       122.17
root mean squared error  =       1.4269
*/

tssmooth exponential exp2 = rawcycle // 예측오차 제곱합을 최소화하는 모수를 추정하여 지수평활
/*
computing optimal exponential  coefficient (0,1)

optimal exponential coefficient =        0.8602
sum-of-squared residuals        =     79.748355
root mean squared error         =      1.152883
*/

tsline rawcycle exp*


** 단순지수평활법을 사용한 표본외 예측

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_2.dta", clear
tsset month

tssmooth exponential exp3 = rawcycle, forecast(5) // 미래 5기간 추가하고 지수평활법으로 예측값 계산

list in -7/L
/*
     +--------------------------------+
     |   month   rawcycle        exp3 |
     |--------------------------------|
 59. | 1964m12      -0.73   -2.351623 |
 60. |  1965m1       0.23   -.9539758 |
 61. |  1965m2          .    .0679284 |
 62. |  1965m3          .    .0679284 |
 63. |  1965m4          .    .0679284 |
     |--------------------------------|
 64. |  1965m5          .    .0679284 |
 65. |  1965m6          .    .0679284 |
     +--------------------------------+
*/

di r(alpha)*0.2340+(1-r(alpha))*-0.9539


** 이중지수 평활법

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_2.dta", clear

tsset month

tssmooth dexponential exp4 = rawcycle, parms(0.3) // 알파 값을 0.3으로 이중지수평활
/*
double-exponential coefficient  =       0.3000
sum-of-squared residuals        =       129.93
root mean squared error         =       1.4716
*/

tssmooth dexponential exp5 = rawcycle // 예측오차 제곱합을 최소화하는 모수를 추정하여 이중지수평활
/*
optimal double-exponential coefficient =        0.5247
sum-of-squared residuals               =     58.587578
root mean squared error                =     .98815972
*/

tsline rawcycle exp4 exp5


** 이중지수 평활법을 사용한 표본외 예측

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_2.dta", clear

tsset month

tssmooth exponential sm1 = rawcycle, parms(0.3)

tssmooth dexponential sm2 = rawcycle, parms(0.3)

tssmooth dexponential sm2_pred = rawcycle, forecast(5) parms(0.3)

list in -7/l
/*
     +--------------------------------------------+
     |   month   rawcycle         sm1    sm2_pred |
     |--------------------------------------------|
 59. | 1964m12      -0.73   -1.590931    -2.94599 |
 60. |  1965m1       0.23   -1.331676   -2.020963 |
 61. |  1965m2          .           .   -.8747306 |
 62. |  1965m3          .           .   -.8785638 |
 63. |  1965m4          .           .   -.8823971 |
     |--------------------------------------------|
 64. |  1965m5          .           .   -.8862302 |
 65. |  1965m6          .           .   -.8900634 |
     +--------------------------------------------+
*/


** Holt-Winters 평활 : 추세가 시간에 따라 변화할 때 사용

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_3.dta", clear

tsset date

tssmooth hwinters hw1 = unrate, parms(0.5 0.5) // 알파와 베타를 0.5로 지정한 HW 평활법

tssmooth hwinters hw2 = unrat, nolog

tsline unrate hw* if date>=ym(2008,1)


** 계절성을 고려한 HW 평활법 

tssmooth shwinters hw3 = unrate if date>=ym(2000,1), period(12) additive nolog
// 월별 데이터이므로 period(12)로 작성 (분기별 데이터는 period(4))
// additive : 계절성 요소를 가법형식으로 포함 (additive가 없으면 승법형식으로 포함)

tssmooth shwinters hw3_pred = unrate if date>=ym(2000,1), period(12) additive nolog forecast(5) // 미래 5기간 예측


** 실업률 변수에 대한 3가지 평활법 적용 후 SSFE(예측오차 제곱합) 비교하기

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_4.dta", clear

tsset date

tssmooth dexponential sm2=unrate if date>=ym(2000,1) // 이중지수평활법

tssmooth hwinters hw1=unrate if date>=ym(2000,1), nolog // HW 평활법

tssmooth shwinters hw2=unrate if date>=ym(2000,1), nolog period(12) additive // 계절성 고려한 HW 평활법을

gen ssfe_sm2=(unrate-sm2)^2
gen ssfe_hw1=(unrate-hw1)^2
gen ssfe_hw2=(unrate-hw2)^2

total ssfe_sm2 ssfe_hw1 ssfe_hw2 // total : 변수의 합계를 계산하여 표로 나타냄
/*
Total estimation                           Number of obs = 147

--------------------------------------------------------------
             |      Total   Std. err.     [95% conf. interval]
-------------+------------------------------------------------
    ssfe_sm2 |   5.695631   1.040463      3.639316    7.751946
    ssfe_hw1 |    3.52048   .4484876      2.634113    4.406846
    ssfe_hw2 |   3.650805   .4646592      2.732478    4.569132
--------------------------------------------------------------
*/
// 예측오차 제곱합이 가장 작은(3.52), 계절성을 포함하지 않은 HW 평활법을 채택

// findit frmttable

total ssfe_sm2
mat def sm2=e(b) // 회귀계수의 벡터(e(b))를 행렬형태로 sm2에 입력
total ssfe_hw1
mat def hw1=e(b)
total ssfe_hw2
mat def hw2=e(b)
matrix def A=(sm2, hw1, hw2) // 행렬 A에 각 변수의 회귀계수를 1x3 행렬로 저장
frmttable, statmat(A) norow nocenter sdec(3) // 행렬을 표로 만들어 보여줌
// norow : 행 제목 삭제, sdec(3) : 통계량을 소수점 셋째자리까지 표시
/*
                                     --------------------------------
                                       ssfe_sm2  ssfe_hw1  ssfe_hw2 
                                     --------------------------------
                                        5.696     3.520     3.651   
                                     --------------------------------
*/


** 패널데이터에 평활법 사용하기

use "D:\STATA연습데이터\STATA시계열데이터분석\T_data6_5.dta", clear

tsset id t

tssmooth dexponential sm2=sales // 이중지수 평활법 사용

// 5개 그룹(id)의 알파 추정치가 서로 다르게 얻어져서 평활법 실행

/*
-----------------------------------------------------------------------------------------------------------
-> id = 1
computing optimal double-exponential coefficient (0,1)

optimal double-exponential coefficient =        0.4244
sum-of-squared residuals               =     19231.409
root mean squared error                =     13.867736

-----------------------------------------------------------------------------------------------------------
-> id = 2
computing optimal double-exponential coefficient (0,1)

optimal double-exponential coefficient =        0.3981
sum-of-squared residuals               =     25521.269
root mean squared error                =     15.975378

-----------------------------------------------------------------------------------------------------------
-> id = 3
computing optimal double-exponential coefficient (0,1)

optimal double-exponential coefficient =        0.3507
sum-of-squared residuals               =      23668.45
root mean squared error                =     15.384554

-----------------------------------------------------------------------------------------------------------
-> id = 4
computing optimal double-exponential coefficient (0,1)

optimal double-exponential coefficient =        0.1519
sum-of-squared residuals               =     32050.803
root mean squared error                =     17.902738

-----------------------------------------------------------------------------------------------------------
-> id = 5
computing optimal double-exponential coefficient (0,1)

optimal double-exponential coefficient =        0.1524
sum-of-squared residuals               =     32961.739
root mean squared error                =     18.155368
*/

출처 : STATA 시계열 데이터 분석(민인식, 최필선)

반응형

댓글