Documentation Example 1 for PROC DISCRIM
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: DISCEX1 */
/* TITLE: Documentation Example 1 for PROC DISCRIM */
/* PRODUCT: SAS/STAT */
/* SYSTEM: ALL */
/* KEYS: discriminant analysis */
/* PROCS: DISCRIM */
/* DATA: FISHER (1936) IRIS DATA - SASHELP.IRIS */
/* */
/* SUPPORT: saswfk UPDATE: July 25, 2010 */
/* REF: PROC DISCRIM, EXAMPLE 1 */
/* MISC: */
/* */
/****************************************************************/
title 'Discriminant Analysis of Fisher (1936) Iris Data';
proc freq data=sashelp.iris noprint;
tables petalwidth * species / out=freqout;
run;
proc sgplot data=freqout;
vbar petalwidth / response=count group=species;
keylegend / location=inside position=ne noborder across=1;
run;
data plotdata;
do PetalWidth=-5 to 30 by 0.5;
output;
end;
run;
%macro plotden;
title3 'Plot of Estimated Densities';
data plotd2;
set plotd;
if setosa < .002 then setosa = .;
if versicolor < .002 then versicolor = .;
if virginica < .002 then virginica = .;
g = 'Setosa '; Density = setosa; output;
g = 'Versicolor'; Density = versicolor; output;
g = 'Virginica '; Density = virginica; output;
label PetalWidth='Petal Width in mm.';
run;
proc sgplot data=plotd2;
series y=Density x=PetalWidth / group=g;
discretelegend;
run;
%mend;
%macro plotprob;
title3 'Plot of Posterior Probabilities';
data plotp2;
set plotp;
if setosa < .01 then setosa = .;
if versicolor < .01 then versicolor = .;
if virginica < .01 then virginica = .;
g = 'Setosa '; Probability = setosa; output;
g = 'Versicolor'; Probability = versicolor; output;
g = 'Virginica '; Probability = virginica; output;
label PetalWidth='Petal Width in mm.';
run;
proc sgplot data=plotp2;
series y=Probability x=PetalWidth / group=g;
discretelegend;
run;
%mend;
title2 'Using Normal Density Estimates with Equal Variance';
proc discrim data=sashelp.iris method=normal pool=yes
testdata=plotdata testout=plotp testoutd=plotd
short noclassify crosslisterr;
class Species;
var PetalWidth;
run;
%plotden;
%plotprob;
title2 'Using Normal Density Estimates with Unequal Variance';
proc discrim data=sashelp.iris method=normal pool=no
testdata=plotdata testout=plotp testoutd=plotd
short noclassify crosslisterr;
class Species;
var PetalWidth;
run;
%plotden;
%plotprob;
title2 'Using Kernel Density Estimates with Equal Bandwidth';
proc discrim data=sashelp.iris method=npar kernel=normal
r=.4 pool=yes testdata=plotdata testout=plotp
testoutd=plotd short noclassify crosslisterr;
class Species;
var PetalWidth;
run;
%plotden;
%plotprob;
title2 'Using Kernel Density Estimates with Unequal Bandwidth';
proc discrim data=sashelp.iris method=npar kernel=normal
r=.4 pool=no testdata=plotdata testout=plotp
testoutd=plotd short noclassify crosslisterr;
class Species;
var PetalWidth;
run;
%plotden;
%plotprob;