Example 15 for PROC LOGISTIC
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: LOGIEX15 */
/* TITLE: Example 15 for PROC LOGISTIC */
/* PRODUCT: STAT */
/* SYSTEM: ALL */
/* KEYS: logistic regression analysis, */
/* binomial response data, */
/* PROCS: LOGISTIC */
/* DATA: */
/* */
/* SUPPORT: Bob Derr */
/* REF: SAS/STAT User's Guide, PROC LOGISTIC chapter */
/* MISC: */
/* */
/****************************************************************/
/*****************************************************************
Example 15. Scoring Data Sets with the SCORE Statement
*****************************************************************/
/*
The remote-sensing data set contains a response variable, CROP, and
prognostic factors X1 through X4.
Specify a SCORE statement to score the CROPS data using the fitted model. The
data together with the predicted values are saved into the data set SCORE1.
With ODS Graphics enabled, the EFFECTPLOT statement produces a
plot of the model-predicted probabilities for each of the response levels.
This plot shows how the value of X3 affects the probabilities of the various
crops when the other prognostic factors are fixed at their means.
The model is again fit, the data and the predicted values are saved into the
data set SCORE2, and the model information is saved in the permanent SAS data
set SASUSER.CROPMODEL. The model is also stored in the CROPMODEL2 data set
for later use by the PLM procedure.
The model is then read from the SASUSER.CROPMODEL data set, and the data and
the predicted values are saved into the data set SCORE3.
The CROPMODEL2 model and the data set is input to the PLM procedure, and the
predicted values are saved into the data set SCORE4.
The PRIOR data set contains the values of the response variable (because this
example uses single-trial MODEL statement syntax) and a _PRIOR_ variable
(containing values proportional to the default priors) in order to set prior
probabilities on the responses. The model is fit, then the data and the
predicted values are saved into the data set SCORE5.
SCORE1, SCORE2, SCORE3, SCORE4, and SCORE5 are identical.
The previously fit data set SASUSER.CROPMODEL is used to score the
new observations in the TEST data set, and the results of scoring
the test data are saved in the SCOREDTEST data set.
*/
title 'Example 15: Scoring Data Sets';
data Crops;
length Crop $ 10;
infile datalines truncover;
input Crop $ @@;
do i=1 to 3;
input x1-x4 @@;
if (x1 ^= .) then output;
end;
input;
datalines;
Corn 16 27 31 33 15 23 30 30 16 27 27 26
Corn 18 20 25 23 15 15 31 32 15 32 32 15
Corn 12 15 16 73
Soybeans 20 23 23 25 24 24 25 32 21 25 23 24
Soybeans 27 45 24 12 12 13 15 42 22 32 31 43
Cotton 31 32 33 34 29 24 26 28 34 32 28 45
Cotton 26 25 23 24 53 48 75 26 34 35 25 78
Sugarbeets 22 23 25 42 25 25 24 26 34 25 16 52
Sugarbeets 54 23 21 54 25 43 32 15 26 54 2 54
Clover 12 45 32 54 24 58 25 34 87 54 61 21
Clover 51 31 31 16 96 48 54 62 31 31 11 11
Clover 56 13 13 71 32 13 27 32 36 26 54 32
Clover 53 08 06 54 32 32 62 16
;
ods graphics on;
proc logistic data=Crops;
model Crop=x1-x4 / link=glogit;
score out=Score1;
effectplot slicefit(x=x3);
run;
ods graphics off;
proc logistic data=Crops outmodel=sasuser.CropModel;
model Crop=x1-x4 / link=glogit;
score data=Crops out=Score2;
store CropModel2;
run;
proc logistic inmodel=sasuser.CropModel;
score data=Crops out=Score3;
run;
proc plm source=CropModel2;
score data=Crops out=ScorePLM predicted=p / ilink;
run;
proc transpose data=ScorePLM out=Score4 prefix=P_ let;
id _LEVEL_;
var p;
by x1-x4 notsorted;
run;
data Score4(drop=_NAME_ _LABEL_);
merge Score4 Crops(keep=Crop x1-x4);
F_Crop=Crop;
run;
proc summary data=ScorePLM nway;
by x1-x4 notsorted;
var p;
output out=into maxid(p(_LEVEL_))=I_Crop;
run;
data Score4;
merge Score4 into(keep=I_Crop);
run;
data Prior;
length Crop $10.;
input Crop _PRIOR_;
datalines;
Clover 11
Corn 7
Cotton 6
Soybeans 6
Sugarbeets 6
;
proc logistic inmodel=sasuser.CropModel;
score data=Crops prior=prior out=Score5 fitstat;
run;
proc freq data=Score1;
table F_Crop*I_Crop / nocol nocum nopercent;
run;
data Test;
input Crop $ 1-10 x1-x4;
datalines;
Corn 16 27 31 33
Soybeans 21 25 23 24
Cotton 29 24 26 28
Sugarbeets 54 23 21 54
Clover 32 32 62 16
;
proc logistic noprint inmodel=sasuser.CropModel;
score data=Test out=ScoredTest;
run;
proc print data=ScoredTest label noobs;
var F_Crop I_Crop P_Clover P_Corn P_Cotton P_Soybeans P_Sugarbeets;
run;