Saturday, April 28, 2012

Cookbook SAS Codes for Bioequivalence Test in 2x2x2 Crossover Design

In Clinical Pharmacology, inferential statistics is performed to show the bioequivalence in terms of the Area Under the Curve (AUC) and the Maximum Concentration (Cmax) that are obtained from the time-concentration data. The typical clinical trial design is 2x2x2 crossover design contains two treatment sequences (Test followed by Reference vs. Reference followed by Test), two treatment periods (period 1 vs period 2), and two treatment groups (Test vs. Reference).

According to FDA’s guidance “Statistical Approaches to Establishing Bioequivalence”, the following assumptions can be made for the test of bioequivalence:

1. AUC and Cmax follow log-normal distribution

2. Bioequivalence is shown if the 90% confidence interval for the geometric least square mean ratio of Test/Reference is fall within 0.8 and 1.25

The statistical tests will follow so called two one-sided tests procedure (TOST) which can be implemented using the following cookbook SAS codes.

* Preparing the data and log-transfer the AUC and Cmax data;
data pkparm;
    set pdkparm;
    keep subno seqence treat period AUC CMAX;

*** Fit the ANOVA model;
ods output LSMeans=lsmean;
ods output estimates=est;
proc mixed data=pd;
      class sequence period treat subno;
      model LAUC or Cmax=sequence period treat;
      random subno(sequence);
      lsmeans treat/pdiff cl alpha=0.1;
      estimate 'T/R' treat -1 1 / cl alpha=0.1;
     * make 'LSMEANS' out=lsmean; *used in old SAS versions;
     * make 'estimate' out=est; *used in old SAS versions;

* Anti-log transformation to obtain the Geometric Means;
data lsmean;
      set lsmean;
      gmean=exp(estimate); *Geometric means;

proc print data=lsmean;

* Anti-log transformation to obtain the ratio of Geometric Means (point estimate) and its 90% confidence interval (lower and upper bounds);
data diffs;
     set EST;
     ratio=exp(est); ** Ratio of geometric mean;
     lower=exp(lower); ** 90% CI lower bound;
     upper=exp(upper); ** 90% CI upper bound;

proc print data=diffs;

Some Notes:

1. p-value for Treatment/Reference comparison can also be obtained from the model (in above EST data set). However, p-value is not the criteria for declaring the bioequivalence and must be interpreted appropriately. We could have a significant p-value (p<0.05) and still show bioequivalence as long as the 90% confidence interval of the geometric mean ratio is fall within 0.8 and 1.25 range. If we have a 90% confidence interval like [0.85, 0.95] or [1.05, 1.15], the bioequivalence will be shown even though the p-values are significant.

2. In SAS Proc Mixed model, the subject within sequence is coded as subno(seqence), not sequence(subno). However, if you use sequence(subno), the results will be the same.

3. For log transformation, it does not matter which base (base 10, 5, or e (natural log)) as long as the final results from the model are correctly an-log transferred back.

4. while we typically say ‘Ratio of geometric mean’, it is actually the ‘ratio of geometric least square mean’ from the model.

5. FDA guidance "Statistical Approaches to Establishing Bioequivalence" appendix E "SAS Program Statements for Average BE Analysis of Replicated Crossover Studies" provided the detail SAS codes with Proc Mixed. While it is stated for the 'replicated crossover studies', however, 2x2x2 crossover design is a simplest case of the replicated crossover studies.

The following illustrates an example of program statements to run the average BE analysis using
PROC MIXED in SAS version 6.12, with SEQ, SUBJ, PER, and TRT identifying sequence,
subject, period, and treatment variables, respectively, and Y denoting the response measure (e.g., log(AUC), log(Cmax)) being analyzed:

ESTIMATE 'T vs. R' TRT 1 -1/CL ALPHA=0.1;

The Estimate statement assumes that the code for the T formulation precedes the code for the R formulation in sort order (this would be the case, for example, if T were coded as 1 and R were coded as 2). If the R code precedes the T code in sort order, the coefficients in the Estimate statement would be changed to -1 1.

In the random statement, TYPE=FA0(2) could possibly be replaced by TYPE=CSH. This guidance recommends that TYPE=UN not be used, as it could result in an invalid (i.e., not non-negative definite) estimated covariance matrix.
Additions and modifications to these statements can be made if the study is carried out in more than one groups of subjects


Anonymous said...

2. In SAS Proc Mixed model, the subject within sequence is coded as subno(seqence), not sequence(subno). However, if you use sequence(subno), the results will be the same.

And subno by itself is OK if all subno values are unique. That is, you do not have two subno = 1, one in each sequence.

Anonymous said...

The "2x2x2" Crossover implies 8 cells or a 2**3 factorial design. Better to use standard nomenclature of 2x2 Crossover, given there are only 4 cells?

michelle moore said...

Amazing information i have learned lot many things with this mail,
thanks you very much for sharing the informationAXIS Clinicals

michelle moore said...

Information is really good, i learned lot many things about clinical trails , thanks a lot for sharing. AXIS Clinicals

Jiangtang Hu said...

Nice to know this PROC MIXED approach. Since SAS 9.2, equivalence test is pretty easier then before using PROC TTEST with TOST option, see <a href=">this post</a>

Anonymous said...

Hello Jiangtanghu, how would you adjust with ttest? I think that's the point of mixed procedure ...