Resources

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,                             */
/*          CLOGLOG link                                        */
/*   PROCS: LOGISTIC                                            */
/*    DATA:                                                     */
/*                                                              */
/* SUPPORT: Bob Derr                                            */
/*     REF: SAS/STAT User's Guide, PROC LOGISTIC chapter        */
/*    MISC:                                                     */
/*                                                              */
/****************************************************************/

/*****************************************************************
Example 15. Complementary Log-Log Model for Interval-Censored Survival Times
*****************************************************************/

/*
Often survival times are not observed more precisely than the interval (for
instance, a day) within which the event occurred.  Survival data of this form
are known as grouped or interval- censored data.  A discrete analogue of the
continuous proportional hazards model (Prentice and Gloeckler 1978; Allison
1982) is used to investigate the relationship between these survival times
and a set of explanatory variables.

As a example of this method. consider a study of the effect of insecticide on
flour beetles.  Four different concentrations of an insecticide were sprayed
on separate groups of flour beetles and the numbers of male and female
flour beetles dying in successive intervals are recorded.  The data are saved
in data set BEETLES below.  This data set contains four variables: TIME, SEX,
CONC, and FREQ.  TIME represents the interval death time; for example, TIME=2
is the interval between day 1 and day 2.  Insects surviving the duration (13
days) of the experiment are given a TIME value of 14.  The variable SEX
represents the sex of the insect (1=male, 2=female), CONC represents the
concentration of the insecticide (mg/cm^2), and FREQ represents the frequency
of the observations.

To use PROC LOGISTIC with the grouped survival data, you must expand the data
so that each beetle has a separate record for each day of survival. A beetle
that died in the third day (time=3) would contribute three observations to
the analysis, one for each day it was alive at the beginning of the day. A
beetle that survives the 13-day duration of the experiment (time=14) would
contribute 13 observations.

A new data set DAYS that contains the beetle-day observations is created from
the data set BEETLES. In addition to the variables SEX, CONC and FREQ, the
data set contains an outcome variable Y and the variable DAY taking the
values 1,...,13.  Y has a value of 1 if the observation corresponds to the
day that the beetle died and has a value of 0 otherwise.

PROC LOGISTIC is invoked to fit a complementary log-log model for binary data
with response variable Y and explanatory variables DAY, SEX, and CONC. Since
the values of Y are coded 0 and 1, specifying the DESCENDING option ensures
that the event (y=1) probability is modeled. The DAY variable is specified
with the GLM coding, which adds a parameter to the model for each of
DAY=1,...,13.  The coefficients of these 13 DAY parameters can be used to
estimate the baseline survival function. The NOINT option is specified to
prevent any redundancy in estimating the coefficients of the DAY effects. The
Newton-Raphson algorithm is used for the maximum likelihood estimation of the
parameters.

Finally, DATA step code is used to compute the survivor curves for
male and female flour beetles exposed to the insecticide of
concentrations .20 mg/cm2 and .80 mg/cm2. The SGPLOT procedure is
used to plot the survival curves. Instead of plotting them as step
functions, the PBSPLINE statement is used to smooth the curves.
*/

title 'Example 15: CLOGLOG Model for Interval-Censored Survival Times';

data Beetles(keep=time sex conc freq);
   input time m20 f20 m32 f32 m50 f50 m80 f80;
   conc=.20; freq= m20; sex=1; output;
             freq= f20; sex=2; output;
   conc=.32; freq= m32; sex=1; output;
             freq= f32; sex=2; output;
   conc=.50; freq= m50; sex=1; output;
             freq= f50; sex=2; output;
   conc=.80; freq= m80; sex=1; output;
             freq= f80; sex=2; output;
   datalines;
 1   3   0  7  1  5  0  4  2
 2  11   2 10  5  8  4 10  7
 3  10   4 11 11 11  6  8 15
 4   7   8 16 10 15  6 14  9
 5   4   9  3  5  4  3  8  3
 6   3   3  2  1  2  1  2  4
 7   2   0  1  0  1  1  1  1
 8   1   0  0  1  1  4  0  1
 9   0   0  1  1  0  0  0  0
10   0   0  0  0  0  0  1  1
11   0   0  0  0  1  1  0  0
12   1   0  0  0  0  1  0  0
13   1   0  0  0  0  1  0  0
14 101 126 19 47  7 17  2  4
;

data Days;
   set Beetles;
   do day=1 to time;
      if (day < 14) then do;
         y= (day=time);
         output;
      end;
   end;
run;

proc logistic data=Days outest=est1;
   class day / param=glm;
   model y(event='1')= day sex conc
         / noint link=cloglog technique=newton;
   freq freq;
run;

data one (keep=day survival element s_m20 s_f20 s_m80 s_f80);
   array dd day1-day13;
   array sc[4] m20 f20 m80 f80;
   array s_sc[4] s_m20 s_f20 s_m80 s_f80 (1 1 1 1);
   set est1;
   m20= exp(sex + .20 * conc);
   f20= exp(2 * sex + .20 * conc);
   m80= exp(sex + .80 * conc);
   f80= exp(2 * sex + .80 * conc);
   survival=1;
   day=0;
   output;
   do over dd;
      element= exp(-exp(dd));
      survival= survival * element;
      do i=1 to 4;
         s_sc[i] = survival ** sc[i];
      end;
      day + 1;
      output;
   end;
run;

%modstyle(name=LogiStyle,parent=htmlblue,markers=circlefilled);
ods listing style=LogiStyle;
proc sgplot data=one;
   title 'Flour Beetles Sprayed with Insecticide';
   xaxis grid integer;
   yaxis grid label='Survival Function';
   pbspline y=s_m20 x=day /
      legendlabel = "Male at 0.20 conc." name="pred1";
   pbspline y=s_m80 x=day /
      legendlabel = "Male at 0.80 conc." name="pred2";
   pbspline y=s_f20 x=day /
      legendlabel = "Female at 0.20 conc." name="pred3";
   pbspline y=s_f80 x=day /
      legendlabel = "Female at 0.80 conc." name="pred4";
   discretelegend "pred1" "pred2" "pred3" "pred4" / across=2;
run;

ods listing close;
ods listing;