## Documentation Example 1 for PROC MODECLUS

```/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: modecex1                                            */
/*   TITLE: Documentation Example 1 for PROC MODECLUS           */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: Nonparametric Density Estimation, Cluster Analysis  */
/*   PROCS: MODECLUS, SGPLOT                                    */
/*    DATA:                                                     */
/*                                                              */
/* SUPPORT: saswfk                UPDATE: July 25, 2010         */
/*     REF: PROC MODECLUS, Example 1                            */
/*    MISC:                                                     */
/*                                                              */
/****************************************************************/

title 'Modeclus Example with Univariate Distributions';
title2 'Uniform Distribution';

data uniform;
drop n;
true=1;
do n=1 to 100;
x=ranuni(123);
output;
end;
run;

proc modeclus data=uniform m=1 k=10 20 40 60 out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 2 by 1.);
yaxis values=(0 to 3 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _K_;
run;

proc modeclus data=uniform m=1 r=.05 .10 .20 .30 out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 2 by 1.);
yaxis values=(0 to 2 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _R_;
run;

data expon;
title2 'Exponential Distribution';
drop n;
do n=1 to 100;
x=ranexp(123);
true=exp(-x);
output;
end;
run;

proc modeclus data=expon m=1 k=10 20 40 out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1 by .5);
yaxis values=(0 to 2 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _K_;
run;

proc modeclus data=expon m=1 r=.20 .40 .80 out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1 by .5);
yaxis values=(0 to 1 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _R_;
run;

title3 'Different Density-Estimation and Clustering Windows';

proc modeclus data=expon m=1 r=.20 ck=10 20 40
out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1 by .5);
yaxis values=(0 to 1 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _CK_;
run;

title3 'Cascaded Density Estimates Using Arithmetic Means';

proc modeclus data=expon m=1 r=.20 cascade=1 2 4 am out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1 by .5);
yaxis values=(0 to 1 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
run;

title2 'Normal Mixture Distribution';

data normix;
drop n sigma;
sigma=.125;
do n=1 to 100;
x=rannor(456)*sigma+mod(n,2)/2;
true=exp(-.5*(x/sigma)**2)+exp(-.5*((x-.5)/sigma)**2);
true=.5*true/(sigma*sqrt(2*3.1415926536));
output;
end;
run;

proc modeclus data=normix m=1 k=10 20 40 60 out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1.6 by .1);
yaxis values=(0 to 3 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _K_;
run;

proc modeclus data=normix m=1 r=.05 .10 .20 .30 out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1.6 by .1);
yaxis values=(0 to 3 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);
by _R_;
run;

title3 'Cascaded Density Estimates Using Arithmetic Means';

proc modeclus data=normix m=1 r=.05 cascade=1 2 4 am out=out short;
var x;
run;

proc sgplot data=out noautolegend;
y2axis label='True' values=(0 to 1.6 by .1);
yaxis values=(0 to 2 by 0.5);
scatter y=density x=x / markerchar=cluster group=cluster;
pbspline y=true x=x / y2axis nomarkers lineattrs=(thickness= 1);