SAS_codes_time series_2

TEMP·2021년 10월 7일
0

SAS

목록 보기
5/13
post-custom-banner

3.1 지수평활법

이게 쫌 헷갈렸는데 그냥 쉽게 deep learning pre-trained transfer training fine tuning.
다 담겨있다. 끝.

3.1.1 단순지수평활법

data mindex;
infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\mindex.txt'; input  mindex @@;
date=intnx('month','1jan86'd,_n_-1);
format date monyy.; run;
proc forecast 
data=mindex
interval=month 
method=expo 
out=out1 
outest=est1
weight=0.89 trend=1 lead=6 outfull outresid; 
id date; var mindex; run; 

https://documentation.sas.com/doc/en/etscdc/14.2/etsug/etsug_forecast_syntax02.htm
데이터 설정해주고
간격 설정
방법으로는 지수평활법
out은 중간 과정
outest는 설명력 같은거
weight는 지수평활 modelf의 hyper parameter
trend는 1차 지수 평활을 의미
lead는 계산할 예측값의 개수(95% 신뢰구간도 함께 출력)
outfull은 out에서 예측값(모든 시점) 하고 실제값 추가
outresid는 out에서 잔차 추가
둘다 없으면 단순히 예측값(관측이후)만 출력됨
음 ID뭘까요?

proc print data=out1; run;
proc print data=est1; run;
/* 이렇게 예측하면 어차피 다 같은데? */

실제와 예측값의 plot

proc sgplot data=out1;
series x=date y=mindex / group = _type_;
where _type_^='RESIDUAL';
refline '01may94'd / axix=x;
yaxis values=(0 to 30 by 5); run; 

out1의 변수중 TYPE이 교차로 나와 있으니 이를 그리긴 하는 type별로 묶어서 그려라
아 그리고 residual을 그리지 마라

/*오차항들의 자기상관계수*/
data out11;
set out1;
if _type_='RESIDUAL';
error = mindex;
drop mindex;
run;

residual만 추출

잔차그림

proc sgplot data=out11;
series x= date y=error;
refline 0 / axis=y;
yaxis values = (-6 to 5 by 1);
run;

자기상관계수

proc arima data = out11;
identify var = error;
run;

t-test 유의확률

/*에측 오차가 원래 가정을 잘 따르는지 확인*/
proc univariate data = out11;
var error;
run; quit;

3.1.2 이중지수평활법

/*이중지수평활법*/
data stock;
infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\stock.txt';
input stock @@;
date = intnx('month','1jan84'd,_n_-1);
format date monyy;
run;
proc forecast data=stock
interval=month method = expo out=out3 outest=est3
weight=0.6 trend=2 lead=6 outfull outresid;
id date;
var stock;
run;

단순히 trend만 바꿔주면 되고 나머지는 같다.

proc print data=out3; run;
proc print data=est3; run;
proc sgplot data=out3;
series x=date y=stock / group=_type_;
where _type_^= 'RESIDUAL';
refline '01jan92'd / axis=x;
yaxis values=(100 to 1100 by 100); 
run; 
data out33; set out3;  
  if _type_='RESIDUAL'; error=stock; run;
proc sgplot data=out33;
  series x=date y=error;
  refline  0 / axis=y ;  
  yaxis values=(-100 to 150 by 50); run;
proc arima data=out33; identify var=error; run; 
proc univariate data=out33; var error; run; 

3.2 계정지수평활법

앞에서는 일정한 주기성이 없을때
즉, 여기서는 주기성(계절성)이 있는경우의 model을 알아본다.

3.2.1 Winters의 가법계절지수평활법

분산이 시간의 흐름에 관계없이 일정한 경우

data pass;
infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\koreapass.txt'; input pass @@;
date=intnx('month','1jan81'd,_n_-1);
format date monyy.; 
run; 
/**  가법지수평활  **/
proc forecast data=pass
interval=month method=addwinters out=out4 outest=est4
weight=0.4 weight=0.1 weight=0.7 lead=12 seasons=12
outfull outresid;
id date; 
var pass; 
run; 
proc print data=est4; run;
proc print data=out4; run;   
proc sgplot data=out4;
series x=date y=pass / group=_type_;
where _type_^= 'RESIDUAL';
refline '01jan90'd / axis=x;
run; 
/*잔차그림*/
data out44; 
set out4;  
if _type_='RESIDUAL'; 
error=pass; 
run;
proc sgplot data=out44;
series x=date  y=error;
refline  0 / axis=y;  
run;
proc arima data=out44; 
identify var=error;
run; 
proc univariate data=out44;
var error; 
run; 

3.2.1 Winters의 승법계절지수평활법

/**  승법지수평활  **/
proc forecast data=pass
interval=month method=winters out=out5 outest=est5
weight=0.5 weight=0.1 weight=0.4 lead=12 seasons=12
outfull outresid;
id date; 
var pass; run;
proc print data=est5; run;
proc print data=out5; run; 
proc sgplot data=out5;
series x=date y=pass / group=_type_;
where _type_^= 'RESIDUAL';
refline '01jan90'd / axis=x; run; 
data out55; set out5;  
if _type_='RESIDUAL'; error=pass;  run;
proc sgplot data=out55;
series x=date y=error;
refline 0 / axis=y; run;
proc arima data=out55; 
identify var=error; 
run; 
proc univariate data=out55; 
var error; 
run;  
post-custom-banner

0개의 댓글