Example 3 for PROC GLMSELECT

/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: glsex3                                              */
/*   TITLE: Example 3 for PROC GLMSELECT                        */
/*    DESC: Donoho and Johnstone Bumps Function                 */
/*     REF: Donoho, D.L., and Johnstone, I.M. (1994), "Ideal    */
/*          spatial adaptation via wavelet shrinkage,"          */
/*          Biometrika, 81, 425-455.                            */
/*                                                              */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: Spline Effects, Scatter Plot Smoothing              */
/*   PROCS: GLMSELECT                                           */
/*                                                              */
/* SUPPORT: Robert Cohen                                        */
/****************************************************************/
%let random=12345;

data DoJoBumps;
keep x bumps bumpsWithNoise;

pi = arcos(-1);

do n=1 to 2048;
x=(2*n-1)/4096;
bumpsWithNoise=bumps+rannor(&random)*sqrt(5);
output;
end;
stop;

compute:
array t(11) _temporary_ (.1 .13 .15 .23 .25 .4 .44 .65 .76 .78 .81);
array b(11) _temporary_ (   4    5    3   4   5 4.2 2.1 4.3  3.1  5.1  4.2);
array w(11) _temporary_ (.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005);

bumps=0;
do i=1 to 11;
bumps=bumps+b[i]*(1+abs((x-t[i])/w[i]))**-4;
end;
bumps=bumps*10.528514619;
return;
run;

proc sgplot data=DoJoBumps;
yaxis display=(nolabel);
series  x=x y=bumpsWithNoise/lineattrs=(color=black);
series  x=x y=bumps/lineattrs=(color=red);
run;

proc sgplot data=DoJoBumps;
yaxis display=(nolabel);
series x=x y=bumps;
loess  x=x y=bumpsWithNoise / lineattrs=(color=red) nomarkers;
run;

proc sgplot data=DoJoBumps;
yaxis display=(nolabel);
series    x=x y=bumps;
pbspline  x=x y=bumpsWithNoise /
lineattrs=(color=red) nomarkers;
run;

proc glmselect data=dojoBumps;
effect spl = spline(x / knotmethod=multiscale(endscale=8)
split details);
model bumpsWithNoise=spl;
output out=out1 p=pBumps;
run;

proc sgplot data=out1;
yaxis display=(nolabel);
series    x=x y=bumps;
series    x=x y=pBumps / lineattrs=(color=red);
run;