Average bioequivalence with a 2x2 crossover design is conventionally analyzed with SAS PROC GLM:
PROC GLM DATA=be;
CLASS SEQ SUBJ PRD TRT;
MODEL LNCMAX = SEQ SUBJ(SEQ) PRD TRT;
RANDOM SUBJ(SEQ) / TEST;
LSMEANS TRT / CL ALPHA=0.1;
ESTIMATE 'T - R' TRT -1 1 / CL ALPHA=0.1;
RUN;
The package ships BEdata, real data from a 2x2
bioequivalence study with three hospitalization groups. The same
analysis with sasLM:
BEdata = af(BEdata, c("ADM", "SEQ", "PRD", "TRT", "SUBJ")) # columns as factors
formula1 = log(CMAX) ~ SEQ/SUBJ + PRD + TRT
GLM(formula1, BEdata)$ANOVA
Response : log(CMAX)
Df Sum Sq Mean Sq F value Pr(>F)
MODEL 48 23.1924 0.48317 5.6278 4.395e-08 ***
RESIDUALS 42 3.6059 0.08585
CORRECTED TOTAL 90 26.7983
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
$Fitness
Root MSE log(CMAX) Mean Coef Var R-square Adj R-sq
0.2930098 6.071036 4.826355 0.8654428 0.7116631
$`Type I`
Df Sum Sq Mean Sq F value Pr(>F)
SEQ 1 0.6454 0.64544 7.5178 0.008938 **
SEQ:SUBJ 45 22.4395 0.49866 5.8081 3.359e-08 ***
PRD 1 0.0969 0.09686 1.1281 0.294242
TRT 1 0.0106 0.01057 0.1231 0.727410
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
$`Type II`
Df Sum Sq Mean Sq F value Pr(>F)
SEQ 1 0.6440 0.64395 7.5005 0.009011 **
SEQ:SUBJ 45 22.5232 0.50052 5.8298 3.173e-08 ***
PRD 1 0.0996 0.09958 1.1599 0.287632
TRT 1 0.0106 0.01057 0.1231 0.727410
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
$`Type III`
Df Sum Sq Mean Sq F value Pr(>F)
SEQ 1 0.3368 0.33679 3.9228 0.05421 .
SEQ:SUBJ 45 22.5232 0.50052 5.8298 3.173e-08 ***
PRD 1 0.0996 0.09958 1.1599 0.28763
TRT 1 0.0106 0.01057 0.1231 0.72741
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
SEQ/SUBJ denotes subjects nested within sequence,
equivalent to SEQ SUBJ(SEQ) of SAS. The Type I, II, and III
tables above match SAS PROC GLM for this unbalanced data set (91
subjects).
The sequence effect must be tested against the subject-within-sequence mean square, not the residual. This is what the RANDOM / TEST statement of SAS does:
$SEQ
Error: 0.9669*SEQ:SUBJ + 0.0331*MSE
Df Sum Sq Mean Sq F value Pr(>F)
SEQ 1.000 0.3368 0.33679 0.6919 0.4099
Error 45.529 22.1626 0.48679
$`The Rest Terms`
Df Sum Sq Mean Sq F value Pr(>F)
PRD 1 0.0996 0.09958 1.1599 0.2876
TRT 1 0.0106 0.01057 0.1231 0.7274
SEQ:SUBJ 45 22.5232 0.50052 5.8298 3.173e-08 ***
RESIDUALS 42 3.6059 0.08585
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
$EMS
SEQ PRD TRT SEQ:SUBJ eps
SEQ Q 1.8693 1
PRD Q 1
TRT Q 1
SEQ:SUBJ 1.9333 1
The two-one-sided-tests (TOST) procedure at the 5% level is operationally the 90% confidence interval of T/R in the log scale:
Estimate Lower CL Upper CL Std. Error t value Df Pr(>|t|)
[1,] 0.021944 -0.083236 0.12712 0.062535 0.3509 42 0.7274
Estimate Lower CL Upper CL
1.0221866 0.9201339 1.1355579
The exponentiated estimate and confidence limits are the geometric mean ratio (GMR) and its 90% confidence interval. Bioequivalence is concluded when the interval is contained in [0.80, 1.25].
Group LSmean LowerCL UpperCL SE Df
T A 6.060638 5.988736 6.132541 0.04274955 42
R A 6.038694 5.961929 6.115459 0.04564037 42
?sasLM for the equivalent nlme::lme
call.