** 시계열 데이터의 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 시계열 데이터 분석(민인식, 최필선)
댓글