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;