/***************************************************** SAS EXAMPLE 7 -- LOGISTIC REGRESSION PROCS: PROC UNIVARIATE PROC MEANS PROC FREQ PROC LOGISTIC PROC GPLOT PROC GENMOD FILENAME: LOGISTIC.SAS ******************************************************/ OPTIONS NODATE FORMDLIM=" " PAGENO=1; DATA WERNER; INFILE "c:\temp\labdata\werner2.dat"; INPUT ID $ 1-4 AGE 5-8 HT 9-12 WT 13-16 PILL 17-20 CHOL 21-24 ALB 25-28 1 CALC 29-32 1 URIC 33-36 1 ; IF HT = 999 THEN HT = .; IF WT = 999 THEN WT = .; IF ALB = 99 THEN ALB = .; IF CALC = 99 THEN CALC = .; IF URIC = 99 THEN URIC = .; IF CHOL GE 400 OR CHOL LE 50 THEN CHOL = . ; /*AGE DUMMY VARIABLES*/ IF AGE NOT = . THEN DO; IF AGE GE 0 AND AGE LT 25 THEN AGEGRP=1; IF AGE GE 25 AND AGE LT 32 THEN AGEGRP=2; IF AGE GE 32 AND AGE LT 42 THEN AGEGRP=3; IF AGE GE 42 THEN AGEGRP=4; AGEDUM1 = (AGEGRP = 1); AGEDUM2 = (AGEGRP = 2); AGEDUM3 = (AGEGRP = 3); AGEDUM4 = (AGEGRP = 4); END; /*MEDIAN SPLIT ON URIC ACID*/ IF URIC NE . THEN HIURIC = (URIC >= 4.5); /*75TH PERCENTILE ON CHOLESTEROL*/ IF CHOL NE . THEN HICHOL = (CHOL >= 260); /*CREATE A PILL DUMMY: 0=NOPILL 1=PILL*/ PILLDUM = PILL - 1.0; RUN; PROC MEANS; TITLE "DESCRIPTIVE STATISTICS"; RUN; /*LOGISTIC REGRESSION WITH A CONTINUOUS PREDICTOR*/ PROC LOGISTIC DESCENDING DATA=WERNER; MODEL HICHOL = URIC; TITLE "LOGISTIC REGRESSION WITH 1 CONTINUOUS PREDICTOR"; TITLE2 "USING THE DESCENDING OPTION"; RUN; PROC LOGISTIC DATA=WERNER; MODEL HICHOL = URIC; TITLE "LOGISTIC REGRESSION WITH 1 CONTINUOUS PREDICTOR"; TITLE2 "WITHOUT THE DESCENDING OPTION"; RUN; PROC LOGISTIC DESCENDING DATA=WERNER; MODEL HICHOL = URIC/ RL CL RSQUARE CTABLE; OUTPUT OUT=OUTLOG1 P=PHAT; TITLE "LOGISTIC REGRESSION WITH 1 CONTINUOUS PREDICTOR"; TITLE2 "AND SOME OPTIONS"; RUN; PROC PRINT DATA=OUTLOG1 (FIRSTOBS=120 OBS=140); VAR ID URIC PHAT HICHOL; TITLE "PRINTOUT OF PREDICTED VALUES FROM THE NEW DATA SET"; RUN; PROC MEANS DATA=OUTLOG1; WHERE PHAT NOT=. AND HICHOL NOT=.; VAR PHAT HICHOL; TITLE "DESCRIPTIVE STATS FOR PREDICTED VALUE AND HI CHOL"; RUN; GOPTIONS RESET=ALL; GOPTIONS DEVICE=WIN TARGET=WINPRTM; SYMBOL1 VALUE=STAR; AXIS1 LENGTH=60 PCT ORDER=0 TO 12 BY 1 LABEL = (FONT=SWISS "URIC ACID"); AXIS2 LENGTH=60 PCT ORDER=0 TO 1 BY .1 LABEL = (FONT=SWISS "ESTIMATED PROBABILITY"); PROC GPLOT; PLOT PHAT*URIC/ HAXIS=AXIS1 VAXIS=AXIS2; TITLE FONT=SWISS "LOGISTIC PROBABILITY"; RUN; /*CROSSTABS FOR AGEGROUP BY HIGH CHOLESTEROL*/ PROC FREQ DATA=WERNER; TABLES AGEGRP * HICHOL / CHISQ nocol nopercent; TITLE "USING AGEGROUP TO PREDICT HIGH CHOLESTEROL"; RUN; /*COMPARE SCORE TEST AND LR CHI-SQUARE FROM PROC LOGISTIC TO PROC FREQ CHI-SQUARES*/ PROC LOGISTIC DESCENDING DATA=WERNER; CLASS AGEGRP / PARAM=REF REF=FIRST ; MODEL HICHOL = AGEGRP / RL CL ; TITLE "AGEGRP IS A CLASS VARIABLE--REF GROUP IS FIRST"; RUN; PROC LOGISTIC DESCENDING DATA=WERNER; CLASS AGEGRP / PARAM=REF REF=LAST; MODEL HICHOL = AGEGRP / RL CL; TITLE "AGEGRP IS A CLASS VARIABLE--REF GROUP IS LAST"; RUN; /*CATEGORICAL VARIABLE AND CONTINUOUS VARIABLE*/ PROC LOGISTIC DATA=WERNER DESCENDING; CLASS AGEGRP / PARAM=REF REF=FIRST; MODEL HICHOL = CALC AGEGRP / RSQUARE ; TITLE "FULL MODEL WITH CALCIUM AND AGEGRP BOTH INCLUDED"; RUN; /*REDUCED MODEL WITH CALCIUM ONLY*/ PROC LOGISTIC DATA=WERNER DESCENDING; where agegrp not=.; MODEL HICHOL = CALC / RSQUARE; TITLE "REDUCED MODEL WITH CALCIUM ONLY INCLUDED"; RUN; ****************************************************************; /*LIKELIHOOD RATIO TEST--USING FULL AND REDUCED MODELS*/ /*DATA STEP TO CREATE LIKELIHOOD RATIO CHI-SQUARE. FILL IN THE APPROPRIATE OUTPUT FROM PROC LOGISTIC, INCLUDING FULL MODEL LR CHI-SQUARE, REDUCED MODEL LR CHI-SQUARE AND THE DEGREES OF FREEDOM. THEN RUN THE DATA STEP TO CALCULATE THE LIKELIHOOD RATIO CHI-SQUARE AND GET THE P-VALUE FROM SAS. USE PROC PRINT TO DISPLAY THE RESULTS*/ DATA TEST; FULLMOD = 196.035; REDMOD = 205.466; DIFF = REDMOD-FULLMOD; DF = 3; PVALUE = 1-PROBCHI(DIFF,DF); /*LABEL VARIABLES TO MAKE OUTPUT LOOK GOOD*/ LABEL PVALUE = "P-VALUE"; LABEL FULLMOD = "FULL MODEL"; LABEL REDMOD = "REDUCED MODEL"; LABEL DIFF = "LIKELIHOOD RATIO CHI-SQUARE"; RUN; /*PRINTOUT OF LR CHI-SQUARE FROM PREVIOUS DATA STEP*/ PROC PRINT DATA=TEST LABEL NOOBS; TITLE "PRINOUT OF LIKELIHOOD RATIO TEST CALCULATED FROM DATA STEP"; RUN; ***************************************************************; *USING PROC GENMOD FOR LOGISTIC REGRESSION--GET LR CHISQUARE; PROC GENMOD DATA=WERNER; CLASS AGEGRP; MODEL HICHOL = AGEGRP CALC/ TYPE3 DIST=BIN ; TITLE "LOGISTIC REGRESSION USING PROC GENMOD"; RUN; PROC GENMOD DESCENDING DATA=WERNER; CLASS AGEGRP; MODEL HICHOL = AGEGRP CALC/ TYPE3 DIST=BIN ; TITLE "LOGISTIC REGRESSION USING PROC GENMOD"; TITLE2 "WITH THE DESCENDING OPTION"; RUN; PROC GENMOD DESCENDING DATA=WERNER ; MODEL HICHOL = CALC AGE AGE*AGE / DIST=BIN TYPE3; TITLE "TRY CONTINUOUS AGE AND AGE-SQUARED IN THE MODEL"; RUN; PROC STANDARD DATA=WERNER MEAN=0 OUT=STDDATA; VAR AGE; RUN; PROC GENMOD DESCENDING DATA=STDDATA ; MODEL HICHOL = CALC AGE AGE*AGE / DIST=BIN TYPE3; TITLE "TRY AGE-SQUARED IN THE MODEL WITH AGE STANDARDIZED"; RUN; ********************STEPWISE LOGISTIC REGRESSION; PROC LOGISTIC DESCENDING DATA=WERNER; MODEL HICHOL = AGE WT HT ALB URIC CALC PILLDUM / SELECTION = STEPWISE DETAILS RSQUARE INCLUDE=1; TITLE "STEPWISE LOGISTIC REGRESSION"; RUN; PROC LOGISTIC DESCENDING DATA=WERNER; MODEL HICHOL = AGE URIC CALC / RL RSQUARE LACKFIT; UNITS AGE = 1 5 10 URIC=1 CALC=1; TITLE "SELECTED MODEL"; RUN;