Example 4 for PROC QUANTSELECT
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: qrsex4 */
/* TITLE: Example 4 for PROC QUANTSELECT */
/* DESC: Surface Fitting with Many Noisy Variables */
/* REF: */
/* */
/* PRODUCT: STAT */
/* SYSTEM: ALL */
/* KEYS: Quantile Regression Model Selection */
/* PROCS: QUANTSELECT */
/* */
/* SUPPORT: Yonggang Yao */
/****************************************************************/
%let p=10;
data artificial;
drop i;
array x{&p};
do i=1 to 400;
do j=1 to &p;
x{j} = ranuni(1);
end;
yTrain = 40*exp(8*((x1-0.5)**2+(x2-0.5)**2))/
(exp(8*((x1-0.2)**2+(x2-0.7)**2))+
exp(8*((x1-0.7)**2+(x2-0.2)**2)))+rannor(1);
output;
end;
yTrain = .;
do x1=0 to 1 by 0.01;
do x2 = 0 to 1 by 0.01;
y = 40*exp(8*((x1-0.5)**2+(x2-0.5)**2))/
(exp(8*((x1-0.2)**2+(x2-0.7)**2))+
exp(8*((x1-0.7)**2+(x2-0.2)**2)));
output;
end;
end;
run;
%macro art;
proc quantselect data=artificial algorithm=smooth;
%do i=1 %to &p;
effect sp&i = spline(x&i);
%end;
model yTrain =
sp1 %do i=2 %to &p; |sp&i %end; @2/details=all;
output out=Out p=pred;
run;
%mend;
%art;
ods graphics on;
data pred;
set out;
where yTrain=.;
run;
%let off0 = offsetmin=0 offsetmax=0;
%let off0 = xaxisopts=(&off0) yaxisopts=(&off0);
%let eopt = location=outside valign=top textattrs=graphlabeltext;
proc template;
define statgraph surfaces;
begingraph / designheight=360px;
layout lattice/columns=2;
layout overlay / &off0;
entry "True Model" / &eopt;
contourplotparm z=y y=x2 x=x1;
endlayout;
layout overlay / &off0;
entry "Fitted Model" / &eopt;
contourplotparm z=pred y=x2 x=x1;
endlayout;
endlayout;
endgraph;
end;
run;
proc sgrender data=pred template=surfaces;
run;