SAS Code for the First-Stage Model
In this section we discuss the implementation of the first-stage model using SAS procedure GLIMMIX. Note that the macro %NORMALBIN uses the same implementation, although it is not visible for the user. The joint model (12.41) is fitted using the following code:
proc glimmix data=norbin; class patientid endp trial;
model response(event='1') = endp endp*treat*trial / noint s dist=byobs(endp) link=byobs(lin) cl; random _residual_ / subject=patientid type=un cl; run;
It is assumed that there are two records per subject in the input dataset, one corresponding to the surrogate endpoint and the other to the true endpoint.
The response variable contains the observed measurements on the continuous true endpoint and the binary surrogate endpoints for each patient. The option event=1 specifies the event category for the binary surrogate. The probability of the event category (event=1) is modeled.
For the mean structure, the variable endp allows one to obtain endpoint-specific intercepts (common intercepts), while the interaction term endp*treat*trial allows us to obtain trial-specific treatment effects for both surrogate and true endpoints.
The Schizophrenia Study. Exploratory plots for a normal-binary surrogacy setting. Panel a: Patients distribution by treatment arm. Panel b: PANSS score distribution by treatment arm across the levels of CGI scores.
Trial- and individual-level surrogacy measures with 95% C.I.
The Schizophrenia Study. Second-stage model. Parameter estimates for the treatment effects upon the surrogate (log(odds ratio)) and the true endpoints. Circle areas are proportional to trial size.
SAS output for selected trials.
The option noint requests that no intercept be included in the mean structure (since these are defined by endp).
The argument dist specifies the built-in (conditional) probability distribution of the data (normal distribution for the true endpoint, and the binomial distribution for the surrogate endpoint). The option dist=byobs (endp) designates a variable whose value identifies the distribution to which an observation belongs, while the option link=byobs(variable) designates a variable whose values identify the link function associated with each endpoint (i.e., identity link for the continuous endpoint and logit link for the binary endpoint).
The statement and argument RANDOM _jresidual_ specify the residual covariance structure. Finally, the subject argument identifies the subject for the analysis, while type is used to define the covariance matrix (a 2 x 2 matrix in our case). The panel in Figure 12.44 displays the covariance matrix and selected parameter estimates for the fixed effects.