/* Adaptive Response Rate Exponential Smoothing(ADRES) */ /* (Forecast Smoothing) */ new; cls; let data[12,1]= 23 25 36 31 26 28 48 36 31 42 53 43 ; t=seqa(1,1,rows(data)+1); library pgraph; graphset; _pltype=6; _plegctl=1; _plegstr="actual\000predicted"; title("ADRES"); beta=0.2; xy(t,(data|miss(0,0))~adres(data,beta)); proc adres(x,beta); local n,m,alpha,S,A,e,i,m1; n=rows(x); m=zeros(n+1,1); alpha=zeros(n,1); S=zeros(n,1); A=zeros(n,1); e=zeros(n,1); S[1]=0; A[1]=0; alpha[1]=1; i=2; do while i<=n; m[i]=alpha[i-1]*x[i-1]+(1-alpha[i-1])*m[i-1]; e[i]=x[i]-m[i]; S[i]=beta*e[i]+(1-beta)*S[i-1]; A[i]=beta*abs(e[i])+(1-beta)*A[i-1]; alpha[i]=abs(S[i]/A[i]); i=i+1; endo; m[n+1]=alpha[n]*x[n]+(1-alpha[n])*m[n]; m[1]=miss(0,0); e[1]=miss(0,0); alpha[1]=miss(0,0); retp(m); endp;