/* The macro program below adds the guidelines to the output */
/* of PROC REG and displays the observations that exceed the */
/* cutoffs. The default cutoff values used are */
/* o twice the average hat diagonal element */
/* o an alpha level of .05 for the RSTUDENT outlier check */
/* o the 50th percentile of an F-distribution for CookÕs */
/* distance measure. */
/* As has been noted, users can change the cutoff values and */
/* specify additional PROC REG and MODEL statement options. */
/* and MODEL statement options. Finally, users can output */
/* the results to a permanent or temporary data set. */
options ls=80 nodate nonumber;
%macro diagnose (
libstat=, indata=, regopt=,
depvar=, indvars=, modopt=,
outopt=, influ=influ, results=results,
hat_mult=2, alpha_t=0.05, alpha_f=0.5);
&libstat;
proc reg data=&indata ®opt;
model &depvar=&indvars / &modopt;
output out=&influ press=pe
h=hatdiag rstudent=rstudent
cookd=cookd &outopt;
proc univariate data=&influ
(where=(cookd^=. or hatdiag=1)) noprint;
var &depvar pe hatdiag;
output out=sspe css=ssty uss=dum1
press sum=dum2 dum3 param;
data &results;
retain div 0;
set &influ end=finish;
if _n_=1 then set sspe;
obs=_n_;
if cookd^=. or hatdiag=1 then div=div+1;
rsqpred=1-(press/ssty);
r59=repeat("*",59);
file print notitles;
if finish;
hatbig=(&hat_mult*param) / div;
tval=1-((&alpha_t/div)/2);
dof_t=div-param-1;
chart1=tinv(tval,dof_t);
dof_f=div-param;
chart2=finv(&alpha_f,param,dof_f);
if finish then put @15 r59 /
@27 "GUIDELINES FOR INTERPRETATION: "//
@15 ' Cutoff value for hat matrix diagonal
element is:' +3 hatbig 7.3 //
@15 ' Cutoff |value| for the Rstudent
statistic is:' +3 chart1 7.3 //
@15 ' Cutoff value for Cooks distance
measure is:' +3 chart2 7.3 //
@15 ' The value of R-square predicted is:'
+3 rsqpred 7.3 // @15 r59;
data what;
set &influ end=finish;
if _n_=1 then set &results (keep=chart2);
retain ind 0;
obs=_n_;
file print notitles header=h;
if cookd>chart2 then do;
put @2 obs @13 hatdiag @35 rstudent 8.3
@55 cookd 8.3 @70 '*****';
ind=ind+1;
end;
if finish=1 and ind>0 then
put // @2 "'*****' indicates that the Cook's Distance
exceeds the appropriate cutoff.";
if finish=1 and ind=0 then
put // @2 " The Cook's Distance does not
exceed the cutoff for any observation.";
return;
h:
put @30 "Influence Diagnostics "//
@15 "X-Leverage" @37 "Rstudent"
@55 "Cook's Distance" /
@1 "Obs" @15 "(hat(ii))"
@37 "Residual" @57 "Measure" /;
return;
%mend;
/* Note: the macro argument names are self evident. For */
/* example, to add, say, the PROC REG model options of */
/* Durbin Watson (dw), and 95% confidence intervals for */
/* the true mean of predicted Y (clm), simply enter: */
/* */
/* modopt=dw clm, */
/* */
/* To change the Y outlier alpha level to .01, simply */
/* enter: */
/* */
/* alpha_t=.01, */
/* */