FOCUS AREAS

Categorical Data Analysis: Chapter 11


data bacteria;
   input dose status $ count @@;
   ldose=log(dose);
   datalines;
1200      dead   0    1200      alive 5
12000     dead   0    12000     alive 5
120000    dead   2    120000    alive 3
1200000   dead   4    1200000   alive 2
12000000  dead   5    12000000  alive 1
120000000 dead   5    120000000 alive 0
;


proc print;
run;

proc logistic data=bacteria descending;
   freq count;
   model status = ldose ldose*ldose / scale=none aggregate
         selection=forward include=1 details covb;
run;
 
data bacteria2;
   input dose dead total @@;
   ldose=log(dose);
   datalines;
1200       0  5
12000      0  5
120000     2  5
1200000    4  6
12000000   5  6
120000000  5  5
;


ods graphics on;
proc probit data=bacteria2 log plot=ippplot; 
   model dead/total = dose / dist=logistic lackfit 
           inversecl (prob=.25 .50 .75); 
run;
ods graphics off; 
 
ods graphics on; 
proc probit data=bacteria2 plot=ippplot; 
   model dead/total = ldose / dist=logistic; 
run;
ods graphics off; 

data assay;
   input drug $ dose status $ count;
   int_n=(drug='n');
   int_s=(drug='s');
   ldose=log(dose);
   datalines;
n 0.01   dead   0
n 0.01   alive 30
n  .03   dead   1
n  .03   alive 29
n  .10   dead   1
n  .10   alive  9
n  .30   dead   1
n  .30   alive  9
n 1.00   dead   4
n 1.00   alive  6
n 3.00   dead   4
n 3.00   alive  6
n 10.00  dead   5
n 10.00  alive  5
n 30.00  dead   7
n 30.00  alive  3
s   .30  dead   0
s   .30  alive 10
s  1.00  dead   0
s  1.00  alive 10
s 3.00   dead   1
s 3.00   alive  9
s 10.00  dead   4
s 10.00  alive  6
s 30.00  dead   5
s 30.00  alive  5
s 100.00 dead   8
s 100.00 alive  2
;


proc logistic data=assay descending;
   freq count;
   model status = int_n int_s 
               ldose*int_n ldose*int_s 
               ldose*int_n*ldose*int_n 
               ldose*int_s*ldose*int_s             
               / noint
               scale=none aggregate
               include=4 selection=forward details;
   eq_slope: test int_nldose=int_sldose;
run;


proc logistic data=assay descending outest=estimate
                   (drop= intercept _link_ _lnlike_) covout;
   freq count;
   model status = int_n int_s ldose /
                  noint scale=none aggregate covb;
run;

data adverse;
   input diagnos $ dose status $ count @@;
   i_diagII=(diagnos='II');
   i_diagI= (diagnos='I');
datalines;
I    1   adverse  3 I    1 no 26
I    5   adverse  7 I    5 no 26
I    10  adverse 10 I   10 no 22
I    12  adverse 14 I   12 no 18
I    15  adverse 18 I   15 no 14
II   1   adverse  6 II   1 no 26
II   5   adverse 20 II   5 no 12
II   10  adverse 26 II  10 no  6
II   12  adverse 28 II  12 no  4
II   15  adverse 31 II  15 no  1
;


proc freq data=adverse;
   weight count;
   tables dose*status diagnos*status diagnos*dose*status /
          nopct nocol cmh;
run;

proc logistic data=adverse outest=estimate
                (drop= intercept _link_ _lnlike_) covout;
   freq count;
   model status = i_diagI i_diagII 
                  dose*i_diagI dose*i_diagII / 
               noint scale=none aggregate;
   eq_slope: test i_diagIdose=i_diagIIdose;
run;
 
proc logistic data=adverse;
   freq count;
   model status = i_diagI i_diagII 
                  dose*i_diagI dose*i_diagII / 
                  noint scale=none aggregate;
   eq_slope: test i_diagIdose=i_diagIIdose;
run;

data development; 
 input age onset total @@; 
datalines; 
5.5    5 209 
6.5    8 126 
7.5   21 136  
8.5   54 143  
9.5   72 115   
10.5  90 112  
11.5 121 126 
12.5  90  91  
; 


ods graphics on; 
proc probit order=data plots=predpplot; 
   model onset/total= age / lackfit; 
run; 
ods graphics off; 
 
ods graphics on; 
proc probit data=development order=data plots=predpplot;   
   model onset/total= age / dist=logistic lackfit; 
run; 
ods graphics off;