/* Double Exponential Smoothing */ /* (n periods ahead) */ new; cls; let data[12,1]= 23 25 36 31 26 28 48 36 31 42 53 43 ; nahead=4; t=seqa(1,1,rows(data)+nahead); library pgraph; graphset; _pltype=6; _plegctl=1; _plegstr="actual\000predicted\000n ahead"; title("Double Exponential"); alpha=0.2; xy(t,(data|miss(zeros(nahead,1),0))~desf(data,alpha,nahead)); proc desf(x,alpha,nahead); local n,m1,m2,m,mp,i,t; n=rows(x); m1=zeros(n,1); m1[1]=x[1]; i=2; do while i<=n; m1[i]=alpha*x[i-1]+(1-alpha)*m1[i-1]; i=i+1; endo; m2=zeros(n,1); m2[1]=m1[1]; i=2; do while i<=n; m2[i]=alpha*m1[i-1]+(1-alpha)*m2[i-1]; i=i+1; endo; m=2*m1-m2; t=seqa(0,1,nahead+1); mp=miss(zeros(n-1,1),0)|m[n]+(alpha/(1-alpha))*(m1[n]-m2[n])*t; m=m|miss(zeros(nahead,1),0); retp(m~mp); endp;