| Title: | Average Bioequivalence with Expanding Limits (ABEL) |
|---|---|
| Description: | Performs comparative bioavailability calculations for Average Bioequivalence with Expanding Limits (ABEL). Implemented are 'Method A' / 'Method B' and the detection of outliers. If the design allows, assessment of the empiric Type I Error and iteratively adjusting alpha to control the consumer risk. Average Bioequivalence - optionally with a tighter (narrow therapeutic index drugs) or wider acceptance range (South Africa: Cmax) - is implemented as well. |
| Authors: | Helmut Schütz [aut, cre]
|
| Maintainer: | Helmut Schütz <[email protected]> |
| License: | GPL (>=3) |
| Version: | 1.1.3.9000 |
| Built: | 2026-05-12 05:36:08 UTC |
| Source: | https://github.com/helmut01/replicatebe |
This function performs the required calculations for the BE decision via conventional (unscaled) Average Bioequivalence based on ANOVA as recommended in the EMA’s guideline.
ABE(alpha = 0.05, path.in, path.out = tempdir(), file, set = "", ext, na = ".", sep = ",", dec = ".", logtrans = TRUE, print = TRUE, details = FALSE, verbose = FALSE, ask = FALSE, data = NULL, theta1, theta2)ABE(alpha = 0.05, path.in, path.out = tempdir(), file, set = "", ext, na = ".", sep = ",", dec = ".", logtrans = TRUE, print = TRUE, details = FALSE, verbose = FALSE, ask = FALSE, data = NULL, theta1, theta2)
alpha |
Type I Error (TIE) probability (nominal level of the test). Conventionally set to 0.05, resulting in a 100(1 – 2α) confidence interval. |
path.in |
Path to the data file for import. |
path.out |
Path to save the result file if |
file |
Name of the dataset for import (without extension). Must be a string (i.e., enclosed in single or double quotation marks). The name is case-sensitive. |
set |
Name of the sheet of an Excel-file (mandatory). Must be a string (i.e., enclosed in single or double quotation marks). The name is case-sensitive. |
ext |
File-extension enclosed in single or double quotation marks.
Acceptable are |
na |
Character string denoting missing values. Acceptable are |
sep |
Variable separator in the CSV-file. Acceptable are |
dec |
Decimal separator in the CSV-file. Acceptable are |
logtrans |
If |
print |
If |
details |
Defaults to |
verbose |
Defaults to |
ask |
Defaults to |
data |
Specification of one of the internal reference datasets ( |
theta1 |
Lower limit of the acceptance range. Defaults to |
theta2 |
Upper limit of the acceptance range. Defaults to |
The model for the treatment comparison is lm(log(PK) ~ sequence + subject %in% sequence + period + treatment, data = data)
where all effects are fixed.
Tested designs
4-period 2-sequence full replicatesTRTR | RTRTTRRT | RTTRTTRR | RRTT
2-period 4-sequence replicateTR | RT | TT | RR (Balaam’s design)
4-period 4-sequence full replicatesTRTR | RTRT | TRRT | RTTRTRRT | RTTR | TTRR | RRTT
3-period 2-sequence full replicatesTRT | RTRTRR | RTT
3-period (partial) replicatesTRR | RTR | RRTTRR | RTR (extra-reference design)
Data structure
Columns must have the headers subject, period,
sequence, treatment, PK, and/or logPK.
Any order of columns is acceptable.
Uppercase and mixed case headers will be internally converted to lowercase headers.
subject must be integer numbers or (any combination of) alphanumerics[A-Z, a-z, -, _, #, 0-9]
period must be integer numbers.
sequence must be contained in the tested designs (numbers or
e.g., ABAB are not acceptable).
The Test treatment must be coded T and the Reference R.
Prints results to a file if argument print = TRUE (default).
If argument print = FALSE, returns a data frame with the elements:
Design |
e.g., TRTR|RTRT |
Method |
ABE |
n |
total number of subjects |
nTT |
number of subjects with two treatments of T (full replicates only) |
nRR |
number of subjects with two treatments of R
|
Sub/seq |
number of subjects per sequence |
Miss/seq |
if the design is unbalanced, number of missings per sequence |
Miss/per |
if the design is incomplete, number of missings per period |
alpha |
nominal level of the test |
DF |
degrees of freedom of the treatment comparison |
CVwT(%) |
intra-subject coefficient of variation of the test treatment (full replicates only) |
CVwR(%) |
intra-subject coefficient of variation of the reference treatment |
BE.lo(%) |
lower bioequivalence limit (e.g., 80) |
BE.hi(%) |
upper bioequivalence limit (e.g., 125) |
CI.lo(%) |
lower confidence limit of the treatment comparison |
CI.hi(%) |
upper confidence limit of the treatment comparison |
PE(%) |
point estimate of the treatment comparison (aka GMR) |
BE |
assessment whether the 100(1 – 2α) CI lies entirely within the acceptance range (pass|fail)
|
Files may contain a commentary header. If reading from a CSV-file,
each line of the commentary header must start with "# "
(hashmark space = ASCII 35 ASCII 32). If reading from an Excel-file
all lines preceding the column headers are treated as a comment.
The ‘ASCII line chart’ in the result file gives the confidence limits with filled black squares ■ and the point estimate as a white rhombus ◊. The BE limits and 100% are given with single vertical lines │. The ‘resolution’ is approximatelly 0.5% and therefore, not all symbols might be shown. The CI and PE take presedence over the limits.
Program offered for Use without any Guarantees and Absolutely No Warranty. No Liability is accepted for any Loss and Risk to Public Health Resulting from Use of this R-Code.
The EMA’s model assumes equal [sic!] intra-subject
variances of test and reference (like in 2×2×2 trials) –
even if proven false in one of the full replicate designs (were both
CVwT and
CVwR can be estimated).
Hence, amongst biostatisticians it is called the ‘crippled model’
because the replicative nature of the study is ignored.
Conventional unscaled ABE has to be employed for
Cmax (if widening of the
acceptance range is clinically not justifiable),
AUC0–t,
AUC0–72 (immediate
release products) and
Cmax,ss,
Cτ,ss,
partialAUC (if widening
of the acceptance range is clinically not justifiable), and
AUC0–t,
AUC0–∞,
AUC0–τ
(modified release products).
Direct widening of the limits for highly variable Cmax to 75.00–133.33% is acceptable in South Africa and Kazakhstan.
Helmut Schütz
European Medicines Agency, Committee for Medicinal Products for Human Use. Guideline on the Investigation of Bioequivalence. CPMP/EWP/QWP/1401/98 Rev. 1/ Corr **. London. 20 January 2010. Online.
European Medicines Agency, Committee for Medicinal Products for Human Use. Guideline on the pharmacokinetic and clinical evaluation of modified release dosage forms. EMA/CPMP/EWP/280/96 Corr1. London. 20 November 2014. Online.
Medicines Control Council. Registration of Medicines. Biostudies. Pretoria. June 2015. Online.
Shohin LE, Rozhdestvenkiy DA, Medvedev VYu, Komarow TN, Grebenkin DYu. Russia, Belarus & Kazakhstan. In: Kanfer I, editor. Bioequivalence Requirements in Various Global Jurisdictions. Charm: Springer; 2017. p. 223.
method.A |
evaluation for ABEL by a fixed effects model (ANOVA) |
method.B |
evaluation for ABEL by a linear mixed effects model |
# Importing from a CSV-file, using most of the defaults: variable # separator comma, decimal separator period, print to file. # Note: You must adapt the path-variables. The example reads from # the data provided by the library. Write-permissions must be granted # for 'path.out' in order to save the result file. Here the deafault # (R's temporary folder) is used. If you don't know where it is, # type tempdir() in the console. path.in <- paste0(find.package("replicateBE"), "/extdata/") ABE(path.in = path.in, file = "DS", set = "02", ext = "csv") # Should result in: # BE-limits : 80.00% ... 125.00% # Confidence interval: 97.32% ... 107.46% pass # Point estimate : 102.26% # Generate the data.frame of results (7-digits precision) and show # in the console. Use an internal dataset. x <- ABE(details = TRUE, print = FALSE, data = rds02) print(x, row.names = FALSE) # Assuming a NTID and assess BE with narrower limits for one # of the internal datasets. ABE(data = rds02, theta1 = 0.90) # Should result in: # BE-limits : 90.00% ... 111.11% # Confidence interval: 97.32% ... 107.46% pass # Point estimate : 102.26%# Importing from a CSV-file, using most of the defaults: variable # separator comma, decimal separator period, print to file. # Note: You must adapt the path-variables. The example reads from # the data provided by the library. Write-permissions must be granted # for 'path.out' in order to save the result file. Here the deafault # (R's temporary folder) is used. If you don't know where it is, # type tempdir() in the console. path.in <- paste0(find.package("replicateBE"), "/extdata/") ABE(path.in = path.in, file = "DS", set = "02", ext = "csv") # Should result in: # BE-limits : 80.00% ... 125.00% # Confidence interval: 97.32% ... 107.46% pass # Point estimate : 102.26% # Generate the data.frame of results (7-digits precision) and show # in the console. Use an internal dataset. x <- ABE(details = TRUE, print = FALSE, data = rds02) print(x, row.names = FALSE) # Assuming a NTID and assess BE with narrower limits for one # of the internal datasets. ABE(data = rds02, theta1 = 0.90) # Should result in: # BE-limits : 90.00% ... 111.11% # Confidence interval: 97.32% ... 107.46% pass # Point estimate : 102.26%
This function performs the required calculations for the mixed (or aggregate) BE decision via Average Bioequivalence with Expanding Limits (ABEL) based on ANOVA (‘Method A’) as recommended in Annex I.
method.A(alpha = 0.05, path.in, path.out = tempdir(), file, set = "", ext, na = ".", sep = ",", dec = ".", logtrans = TRUE, regulator = "EMA", ola = FALSE, print = TRUE, details = FALSE, adjust = FALSE, verbose = FALSE, ask = FALSE, plot.bxp = FALSE, fence = 2, data = NULL)method.A(alpha = 0.05, path.in, path.out = tempdir(), file, set = "", ext, na = ".", sep = ",", dec = ".", logtrans = TRUE, regulator = "EMA", ola = FALSE, print = TRUE, details = FALSE, adjust = FALSE, verbose = FALSE, ask = FALSE, plot.bxp = FALSE, fence = 2, data = NULL)
alpha |
Type I Error (TIE) probability (nominal level of the test). Conventionally set to 0.05, resulting in a 100(1 – 2α) confidence interval. |
path.in |
Path to the data file for import. |
path.out |
Path to save the result file if |
file |
Name of the dataset for import (without extension). Must be a string (i.e., enclosed in single or double quotation marks). |
set |
Name of the sheet of an Excel-file (mandatory). Must be a string (i.e., enclosed in single or double quotation marks). |
ext |
File-extension enclosed in single or double quotation marks.
Acceptable are |
na |
Character string denoting missing values. Acceptable are |
sep |
Variable separator in the CSV-file. Acceptable are |
dec |
Decimal separator in the CSV-file. Acceptable are |
logtrans |
If |
regulator |
Set regulatory conditions. If |
ola |
Defaults to |
print |
If |
details |
Defaults to |
adjust |
Defaults to |
verbose |
Defaults to |
ask |
Defaults to |
plot.bxp |
Only observed if |
fence |
Only observed if |
data |
Specification of one of the internal reference datasets ( |
The model for the estimation of CVwR is lm(log(PK) ~ sequence + subject %in% sequence + period, data = data[data$treatment == "R", ])
where all effects are fixed.
The model for the treatment comparison is lm(log(PK) ~ sequence + subject %in% sequence + period + treatment, data = data)
where all effects are fixed.
Tested designs
4-period 2-sequence full replicatesTRTR | RTRTTRRT | RTTRTTRR | RRTT
2-period 4-sequence replicateTR | RT | TT | RR (Balaam’s design)
4-period 4-sequence full replicatesTRTR | RTRT | TRRT | RTTRTRRT | RTTR | TTRR | RRTT
3-period 2-sequence full replicatesTRT | RTRTRR | RTT
3-period (partial) replicatesTRR | RTR | RRTTRR | RTR (extra-reference design)
Data structure
Columns must have the headers subject, period,
sequence, treatment, PK, and/or logPK.
Any order of columns is acceptable.
Uppercase and mixed case headers will be internally converted to lowercase
headers.
subject must be integers or (any combination of) alphanumerics[A-Z, a-z, -, _, #, 0-9]
period must be integer numbers.
sequence must be contained in the tested designs (numbers or
e.g., ABAB are not acceptable).
The Test treatment must be coded T and the Reference R.
Prints results to a file if argument print = TRUE (default).
If argument print = FALSE, returns a data frame with the elements:
Design |
e.g., TRTR|RTRT |
Method |
A |
n |
total number of subjects |
nTT |
number of subjects with two treatments of T (full
replicates only) |
nRR |
number of subjects with two treatments of R
|
Sub/seq |
number of subjects per sequence |
Miss/seq |
if the design is unbalanced, number of missings per sequence |
Miss/per |
if the design is incomplete, number of missings per period |
alpha |
nominal level of the test |
DF |
degrees of freedom of the treatment comparison |
CVwT(%) |
intra-subject coefficient of variation of the test treatment (full replicates only) |
CVwR(%) |
intra-subject coefficient of variation of the reference treatment |
swT |
intra-subject standard deviation of the test treatment (full replicates only) |
swR |
intra-subject standard deviation of the reference treatment |
sw.ratio |
ratio of intra-subject deviations of T and R (full replicates only) |
sw.ratio.CL |
upper confidence limit of sw.ratio (full replicates only)
|
If reference-scaling is applicable (i.e., CVwR(%) >30%):
L(%) |
lower expanded limit of the acceptance range (AR) |
U(%) |
upper expanded limit of the acceptance range (AR) |
If reference-scaling is not applicable (i.e., CVwR(%) ≤30%):
BE.lo(%) |
lower limit of the conventional AR ( 80) |
BE.hi(%) |
upper limit of the conventional AR (125)
|
CL.lo(%) |
lower confidence limit of the treatment comparison |
CL.hi(%) |
upper confidence limit of the treatment comparison |
PE(%) |
point estimate of the treatment comparison (aka GMR) |
CI |
assessment whether the 100(1 – 2α) CI lies entirely within the acceptance range (pass|fail) |
GMR |
assessment whether the PE lies entirely within the GMR-restriction 80.00--125.00% (pass|fail) |
BE |
mixed (aggregate) assessment whether the study demonstrates bioequivalence (pass|fail) |
log.half-width |
half-width of the confidence interval in log-scale |
If ola = TRUE and at least one studentized outlier was detected:
outlier |
outlying subject(s) |
CVwR.rec(%) |
intra-subject coefficient of variation of R; recalculated after exclusion of outlier(s) |
swR.rec |
intra-subject standard deviation of the reference treatment after exclusion of outlier(s) |
sw.ratio.rec |
ratio of intra-subject standard deviations of T and R after exclusion of outlier(s); full replicates only |
sw.ratio.rec.CL |
upper confidence limit of sw.ratio.rec (full replicates only)
|
If reference-scaling is applicable (i.e., CVwR(%) >30):
L.rec(%) |
recalculated lower expanded limit of the AR |
U.rec(%) |
recalculated upper expanded limit of the AR |
If reference-scaling is not applicable (i.e., CVwR(%) ≤30):
BE.rec.lo(%) |
lower limit of the conventional AR ( 80) |
BE.rec.hi(%) |
upper limit of the conventional AR (125)
|
CI.rec |
assessment whether the 100(1–2α) CI lies entirely within the new acceptance range (pass|fail) |
GMR.rec |
assessment whether the PE lies entirely within the GMR-restriction 80.00--125.00% (pass|fail) |
BE.rec |
mixed (aggregate) assessment whether the study demonstrates bioequivalence (pass|fail)
|
Files may contain a commentary header. If reading from a CSV-file,
each line of the commentary header must start with "# "
(hashmark space = ASCII 35 ASCII 32). If reading from an Excel-file
all lines preceding the column headers are treated as a comment.
The ‘ASCII line chart’ in the result file gives the confidence limits with filled black squares ■ and the point estimate as a white rhombus ◊. If a confidence limit exceeds the maximum possible expansion limit, it is shown as a triangle ◄ or ►. Expanded limits are given as double vertical lines ║. Unscaled limits, the GMR restriction, and 100% are given with single vertical lines │. The ‘resolution’ is approximatelly 0.5% and therefore, not all symbols might be shown. The CI and PE take presedence over the limits and the expanded limits over unscaled ones.
Program offered for Use without any Guarantees and Absolutely No Warranty. No Liability is accepted for any Loss and Risk to Public Health Resulting from Use of this R-Code.
The EMA’s model specified as ‘Method B’ in Annex I assumes
equal [sic] intra-subject variances of test and reference (like in
2×2×2
trials) – even if proven false in one of the full replicate designs (were
both CVwT and
CVwR can be estimated).
Hence, amongst biostatisticians it is called the ‘crippled model’
because the replicative nature of the study is ignored.
The half-width of the CI in log-scale allows a comparison of
methods (B vs A) where a higher value might point towards
a more conservative decision. In the provided reference datasets – with
one exception – the conclusion of BE (based on the mixed
CI and GMR criteria) agrees between ‘Method A’
and ‘Method B’. However, for the highly incomplete dataset 14
‘Method A’ was liberal (passing by ANOVA but
failing by the mixed effects model).
Reference-scaling is acceptable for Cmax (immediate release products) and Cmax,ss,
Cτ,ss, and
partialAUC (modified release products). However, quoting the BE guideline:
The applicant should justify that the calculated intra-subject
variability is a reliable estimate and that it is not the result of
outliers.
Quoting the Q&A on the Revised EMA Bioequivalence Guideline:
... a study could be acceptable if the bioequivalence
requirements are met both including the outlier subject (using the
scaled average bioequivalence approach and the within-subject CV with
this subject) and after exclusion of the outlier (using the within-subject
CV without this subject).
An outlier test is not an expectation of the medicines agencies but
outliers could be shown by a box plot. This would allow the medicines
agencies to compare the data between them.
The EMA’s method of reference-scaling for highly
variable drugs / drug products is currently recommended in other jurisdictions
as well (e.g., the WHO; ASEAN States, Australia, Belarus,
Brazil, Chile, Egypt, the Eurasian Economic Union, the East African Community,
New Zealand, the Russian Federation).
In a pilot phase the WHO accepted reference-scaling for AUC (4-period full replicate
studies are mandatory in order to assess the variability associated with each product).
It was an open issue how this assessment should be done. In Population Bioequivalence (PBE)
and Individual Bioequivalence (IBE) the
swT/swR ratio was assessed and similar
variability was concluded for a ratio within 0.667–1.500. However, the power
of comparing variabilities in a study designed to demonstrate ABE
is low. This was one of the reasons why PBE and IBE were
not implemented in regulatory practice. An alternative approach is given in the
FDA’s draft ANDA guidance. Variabilities are
considered comparable if the upper confidence limit of
σwT/σwR is less
than or equal to 2.5.
In 2021 the requirement of comparing variabilities was lifted.
Helmut Schütz, Michael Tomashevskiy, Detlew Labes
European Medicines Agency, Committee for Medicinal Products for Human Use. Guideline on the Investigation of Bioequivalence. CPMP/EWP/QWP/1401/98 Rev. 1/ Corr **. London. 20 January 2010. Online.
European Generic and Biosimilar Medicines Association. 3rdEGA Symposium on Bioequivalence. Questions and Answers on the Revised EMA Bioequivalence Guideline. London. 1 June 2010. Online.
European Medicines Agency, Committee for Medicinal Products for Human Use. Questions & Answers: positions on specific questions addressed to the Pharmacokinetics Working Party (PKWP). EMA/618604/2008 Rev. 13. London. 19 November 2015. Online.
European Medicines Agency. Clinical pharmacology and pharmacokinetics: questions and answers. 3.1 Which statistical method for the analysis of a bioequivalence study does the Agency recommend? Annex I. EMA/582648/2016. London. 21 September 2016. Online.
Executive Board of the Health Ministers’ Council for GCC States. The GCC Guidelines for Bioequivalence. Version 3.0. May 2021. Online.
Health Canada. Guidance Document. Conduct and Analysis of Comparative Bioavailability Studies. Ottawa. 2018/06/08. Online.
European Medicines Agency, Committee for Medicinal Products for Human Use. Guideline on the pharmacokinetic and clinical evaluation of modified release dosage forms. EMA/CPMP/EWP/280/96 Corr1. London. 20 November 2014. Online.
Shohin LE, Rozhdestvenkiy DA, Medvedev VYu, Komarow TN, Grebenkin DYu. Russia, Belarus & Kazakhstan. In: Kanfer I, editor. Bioequivalence Requirements in Various Global Jurisdictions. Charm: Springer; 2017. p. 199–227.
World Health Organization, Prequalification Team: medicines. Guidance Document: Application of reference-scaled criteria for AUC in bioequivalence studies conducted for submission to PQTm. Geneva. 22 November 2018. Online.
World Health Organization. Application of reference-scaled criteria for AUC in bioequivalence studies conducted for submission to PQT/MED. Geneva. 02 July 2021. Online.
U.S. Food and Drug Administration, Center for Drug Evaluation and Research. Draft Guidance for Industry. Bioequivalence Studies with Pharmacokinetic Endpoints for Drugs Submitted Under an ANDA. August 2021. Download.
Labes D, Schütz H. Inflation of Type I Error in the Evaluation of Scaled Average Bioequivalence, and a Method for its Control. Pharm Res. 2016; 33(11): 2805–14. doi:10.1007/s11095-016-2006-1
method.B |
evaluation by a linear mixed effects model (subjects random) |
ABE |
evaluation for conventional (unscaled) Average Bioequivalence |
# Importing from a CSV-file, using most of the defaults: variable # separator colon, decimal separator period, no outlier-analyis, # print to file. # Note: You must adapt the path-variables. The example reads from # the data provided by the library. Write-permissions must be granted # for 'path.out' in order to save the result file. Here the default # (R's temporary folder) is used. If you don't know where it is, # type tempdir() in the console. path.in <- paste0(find.package("replicateBE"), "/extdata/") method.A(path.in = path.in, file = "DS", set = "01", ext = "csv") # Should result in: # CVwT : 35.16% # swT : 0.34138 # CVwR : 46.96% (reference-scaling applicable) # swR : 0.44645 # Expanded limits : 71.23% ... 140.40% [100exp(±0.760·swR)] # swT / swR : 0.7647 (similar variabilities of T and R) # sw-ratio (upper CL): 0.9324 (comparable variabilities of T and R) # Confidence interval: 107.11% ... 124.89% pass # Point estimate : 115.66% pass # Mixed (CI & PE) : pass # # Internal reference dataset 01 used and results to R's # temporary folder. Additional outlier-analyis. method.A(ola = TRUE, data = rds01) # Should give the same as above. Additionally: # Outlier fence : 2×IQR of studentized residuals. # Recalculation due to presence of 2 outliers (subj. 45|52) # CVwR (outl. excl.) : 32.16% (reference-scaling applicable) # swR (recalculated) : 0.31374 # Expanded limits : 78.79% ... 126.93% [100exp(±0.760·swR)] # swT / swR (recalc.): 1.0881 (similar variabilities of T and R) # sw-ratio (upper CL): 1.3282 (comparable variabilities of T and R) # Confidence interval: pass # Point estimate : pass # Mixed (CI & PE) : pass # Same dataset. Show information about outliers and the ANOVA-table. method.A(ola = TRUE, print = FALSE, verbose = TRUE, data = rds01) # Generate the data.frame of results (full precision) and show it # in the console x <- method.A(ola = TRUE, details = TRUE, print = FALSE, data = rds01) print(x, row.names = FALSE) # # Assess the Type I Error and iteratively adjust alpha if necessary. # Not run: due to timing policy of CRAN for examples method.A(adjust = TRUE, data = rds01) # Should give in the result file: # Assessment of the empiric Type I Error (TIE); 1,000,000 studies simulated. # TIE not > nominal 0.05; consumer risk is controlled. # # Same with recalculation based on outliers, iteratively adjust alpha # if necessary method.A(ola = TRUE, adjust = TRUE, data = rds01) # Should give in the result file: # Assessment of the empiric Type I Error (TIE) based on original CVwR; # 1,000,000 studies simulated. # TIE not > nominal 0.05; consumer risk is controlled. # Assessment of the empiric Type I Error (TIE) based on recalculated CVwR; # 1,000,000 studies in each of the 8 iterations simulated. # TIE for alpha 0.050000 : 0.07018 # TIE for adjusted alpha 0.033416: 0.05000 # # Repeat the evaluation with the adjusted alpha. method.A(alpha = 0.033416, ola = TRUE, adjust = TRUE, data = rds01) # Should give in the result file: # alpha : 0.033416 (93.3168% CI) # Confidence interval: 106.16% ... 126.00% pass # Point estimate : 115.66% pass # Mixed (CI & PE) : pass # Assessment based on recalculated CVwR 32.16% # Confidence interval: pass # Point estimate : pass # Mixed (CI & PE) : pass # Assessment of the empiric Type I Error (TIE) based on original CVwR; # 1,000,000 studies simulated. # TIE not > nominal 0.05; consumer risk is controlled. # Assessment of empiric Type I Error (TIE) based on recalculated CVwR; # 1,000,000 studies in each of the 8 iterations simulated. # TIE for alpha 0.033416 : 0.05000 # TIE not > nominal 0.05; consumer risk is controlled.# Importing from a CSV-file, using most of the defaults: variable # separator colon, decimal separator period, no outlier-analyis, # print to file. # Note: You must adapt the path-variables. The example reads from # the data provided by the library. Write-permissions must be granted # for 'path.out' in order to save the result file. Here the default # (R's temporary folder) is used. If you don't know where it is, # type tempdir() in the console. path.in <- paste0(find.package("replicateBE"), "/extdata/") method.A(path.in = path.in, file = "DS", set = "01", ext = "csv") # Should result in: # CVwT : 35.16% # swT : 0.34138 # CVwR : 46.96% (reference-scaling applicable) # swR : 0.44645 # Expanded limits : 71.23% ... 140.40% [100exp(±0.760·swR)] # swT / swR : 0.7647 (similar variabilities of T and R) # sw-ratio (upper CL): 0.9324 (comparable variabilities of T and R) # Confidence interval: 107.11% ... 124.89% pass # Point estimate : 115.66% pass # Mixed (CI & PE) : pass # # Internal reference dataset 01 used and results to R's # temporary folder. Additional outlier-analyis. method.A(ola = TRUE, data = rds01) # Should give the same as above. Additionally: # Outlier fence : 2×IQR of studentized residuals. # Recalculation due to presence of 2 outliers (subj. 45|52) # CVwR (outl. excl.) : 32.16% (reference-scaling applicable) # swR (recalculated) : 0.31374 # Expanded limits : 78.79% ... 126.93% [100exp(±0.760·swR)] # swT / swR (recalc.): 1.0881 (similar variabilities of T and R) # sw-ratio (upper CL): 1.3282 (comparable variabilities of T and R) # Confidence interval: pass # Point estimate : pass # Mixed (CI & PE) : pass # Same dataset. Show information about outliers and the ANOVA-table. method.A(ola = TRUE, print = FALSE, verbose = TRUE, data = rds01) # Generate the data.frame of results (full precision) and show it # in the console x <- method.A(ola = TRUE, details = TRUE, print = FALSE, data = rds01) print(x, row.names = FALSE) # # Assess the Type I Error and iteratively adjust alpha if necessary. # Not run: due to timing policy of CRAN for examples method.A(adjust = TRUE, data = rds01) # Should give in the result file: # Assessment of the empiric Type I Error (TIE); 1,000,000 studies simulated. # TIE not > nominal 0.05; consumer risk is controlled. # # Same with recalculation based on outliers, iteratively adjust alpha # if necessary method.A(ola = TRUE, adjust = TRUE, data = rds01) # Should give in the result file: # Assessment of the empiric Type I Error (TIE) based on original CVwR; # 1,000,000 studies simulated. # TIE not > nominal 0.05; consumer risk is controlled. # Assessment of the empiric Type I Error (TIE) based on recalculated CVwR; # 1,000,000 studies in each of the 8 iterations simulated. # TIE for alpha 0.050000 : 0.07018 # TIE for adjusted alpha 0.033416: 0.05000 # # Repeat the evaluation with the adjusted alpha. method.A(alpha = 0.033416, ola = TRUE, adjust = TRUE, data = rds01) # Should give in the result file: # alpha : 0.033416 (93.3168% CI) # Confidence interval: 106.16% ... 126.00% pass # Point estimate : 115.66% pass # Mixed (CI & PE) : pass # Assessment based on recalculated CVwR 32.16% # Confidence interval: pass # Point estimate : pass # Mixed (CI & PE) : pass # Assessment of the empiric Type I Error (TIE) based on original CVwR; # 1,000,000 studies simulated. # TIE not > nominal 0.05; consumer risk is controlled. # Assessment of empiric Type I Error (TIE) based on recalculated CVwR; # 1,000,000 studies in each of the 8 iterations simulated. # TIE for alpha 0.033416 : 0.05000 # TIE not > nominal 0.05; consumer risk is controlled.
This function performs the required calculations for the mixed (or aggregate) BE decision via Average Bioequivalence with Expanding Limits (ABEL) based on a linear mixed effects model with subjects as a random effect (‘Method B’) as specified in Annex I.
method.B(alpha = 0.05, path.in, path.out = tempdir(), file, set = "", ext, na = ".", sep = ",", dec = ".", logtrans = TRUE, regulator = "EMA", ola = FALSE, print = TRUE, details = FALSE, verbose = FALSE, ask = FALSE, plot.bxp = FALSE, fence = 2, data = NULL, option = 2)method.B(alpha = 0.05, path.in, path.out = tempdir(), file, set = "", ext, na = ".", sep = ",", dec = ".", logtrans = TRUE, regulator = "EMA", ola = FALSE, print = TRUE, details = FALSE, verbose = FALSE, ask = FALSE, plot.bxp = FALSE, fence = 2, data = NULL, option = 2)
alpha |
Type I Error (TIE) probability (nominal level of the test).
Conventionally set to 0.05, resulting in a
100(1 – 2α)
confidence interval. |
path.in |
Path to the data file for import. |
path.out |
Path to save the result file if |
file |
Name of the dataset for import (without extension). Must be a string (i.e., enclosed in single or double quotation marks). |
set |
Name of the sheet of an Excel-file (mandatory). Must be a string (i.e., enclosed in single or double quotation marks). |
ext |
File-extension enclosed in single or double quotation marks.
Acceptable are |
na |
Character string denoting missing values. Acceptable are |
sep |
Variable separator in the CSV-file. Acceptable are |
dec |
Decimal separator in the CSV-file. Acceptable are
|
logtrans |
If |
regulator |
Set regulatory conditions. If |
ola |
Defaults to |
print |
If |
details |
Defaults to |
verbose |
Defaults to |
ask |
Defaults to |
plot.bxp |
Only observed if |
fence |
Only observed if |
data |
Specification of one of the internal reference datasets ( |
option |
If |
The model for the estimation of CVwR is lm(log(PK) ~ sequence + subject %in% sequence + period, data = data[data$treatment == "R", ])
where all effects are fixed.
The model for the treatment comparison is with option = 2 (default) lme(log(PK) ~ sequence + period + treatment, random = ~1|subject, data = data)
and with option = 1, option = 3 lmer(log(PK) ~ sequence + period + treatment + (1|subject), data = data)
where sequence, period, and treatment are fixed effects and subject(sequence) is a random effect.
Tested designs
4-period 2-sequence full replicatesTRTR | RTRTTRRT | RTTRTTRR | RRTT
2-period 4-sequence replicateTR | RT | TT | RR (Balaam’s design)
4-period 4-sequence full replicatesTRTR | RTRT | TRRT | RTTRTRRT | RTTR | TTRR | RRTT
3-period 2-sequence full replicatesTRT | RTRTRR | RTT
3-period (partial) replicatesTRR | RTR | RRTTRR | RTR (extra-reference design)
Data structure
Columns must have the headers subject, period,
sequence, treatment, PK, and/or logPK.
Any order of columns is acceptable.
Uppercase and mixed case headers will be internally converted to lowercase headers.
subject must be integer numbers or (any combination of) alphanumerics[A-Z, a-z, -, _, #, 0-9]
period must be integer numbers.
sequence must be contained in the tested designs (numbers or e.g., ABAB are not acceptable).
The Test treatment must be coded T and the Reference R.
Prints results to a file if argument print = TRUE (default).
If argument print = FALSE, returns a data.frame with the elements:
Design |
e.g., TRTR|RTRT |
Method |
B-option (1, 2, or 3) |
n |
total number of subjects |
nTT |
number of subjects with two treatments of T (full replicates only) |
nRR |
number of subjects with two treatments of R
|
Sub/seq |
number of subjects per sequence |
Miss/seq |
if the design is unbalanced, number of missings per sequence |
Miss/per |
if the design is incomplete, number of missings per period |
alpha |
nominal level of the test |
DF |
degrees of freedom of the treatment comparison |
CVwT(%) |
intra-subject coefficient of variation of the test treatment (full replicates only) |
CVwR(%) |
intra-subject coefficient of variation of the reference treatment |
swT |
intra-subject standard deviation of the test treatment (full replicates only) |
swR |
intra-subject standard deviation of the reference treatment |
sw.ratio |
ratio of intra-subject deviations of T and R (full replicates only) |
sw.ratio.CL |
upper confidence limit of sw.ratio (full replicates only)
|
If reference-scaling is applicable (i.e., CVwR(%) >30):
L(%) |
lower expanded limit of the acceptance range (AR) |
U(%) |
upper expanded limit of the acceptance range (AR) |
If reference-scaling is not applicable (i.e., ≤30):
BE.lo(%) |
lower limit of the conventional AR ( 80) |
BE.hi(%) |
upper limit of the conventional AR (125)
|
CL.lo(%) |
lower confidence limit of the treatment comparison |
CL.hi(%) |
upper confidence limit of the treatment comparison |
PE(%) |
point estimate of the treatment comparison (aka GMR) |
CI |
assessment whether the 100(1 – 2α) CI lies entirely within the acceptance range (pass|fail) |
GMR |
assessment whether the PE lies entirely within the GMR-restriction 80.00--125.00% (pass|fail) |
BE |
mixed (aggregate) assessment whether the study demonstrates bioequivalence (pass|fail) |
log.half-width |
half-width of the confidence interval in log-scale |
If ola = TRUE and at least one studentized outlier was detected:
outlier |
outlying subject(s) |
CVwR.rec(%) |
intra-subject coefficient of variation of R; recalculated after exclusion of outlier(s) |
swR.rec |
intra-subject standard deviation of the reference treatment after exclusion of outlier(s) |
sw.ratio.rec |
ratio of intra-subjectstandard deviations of T and R after exclusion of outlier(s); full replicates only |
sw.ratio.rec.CL |
upper confidence limit of sw.ratio.rec (full replicates only)
|
If reference-scaling is applicable (i.e., CVwR.rec(%) >30):
L.rec(%) |
recalculated lower expanded limit of the AR |
U.rec(%) |
recalculated upper expanded limit of the AR |
If reference-scaling is not applicable (i.e., CVwR.rec(%) ≤30):
BE.rec.lo(%) |
lower limit of the conventional AR ( 80) |
BE.rec.hi(%) |
upper limit of the conventional AR (125)
|
GMR.rec |
assessment whether the PE lies entirely within the GMR-restriction 80.00--125.00% (pass|fail) |
BE.rec |
mixed (aggregate) assessment whether the study demonstrates bioequivalence (pass|fail)
|
Files may contain a commentary header. If reading from a CSV-file,
each line of the commentary header must start with "# "
(hashmark space = ASCII 35 ASCII 32). If reading from an Excel-file
all lines preceding the column headers are treated as a comment.
The ‘ASCII line chart’ in the result file gives the confidence limits with filled black squares ■ and the point estimate as a white rhombus ◊. If a confidence limit exceeds the maximum possible expansion limit, it is shown as a triangle ◄ or ►. Expanded limits are given as double vertical lines ║. Unscaled limits, the GMR restriction, and 100% are given with single vertical lines │. The ‘resolution’ is approximatelly 0.5% and therefore, not all symbols might be shown. The CI and PE take presedence over the limits and the expanded limits over unscaled ones.
Program offered for Use without any Guarantees and Absolutely No Warranty. No Liability is accepted for any Loss and Risk to Public Health Resulting from Use of this R-Code.
The EMA’s model specified as ‘Method B’ in Annex I assumes
equal [sic] intra-subject variances of test and reference (like in
2×2×2
trials) – even if proven false in one of the full replicate designs (were
both CVwT and
CVwR can be estimated).
Hence, amongst biostatisticians it is called the “crippled model”
because the replicative nature of the study is ignored.
The method for calculating the degrees of freedom is not specified in the
SAS code provided by the EMA in Annex I. Hence,
the default in PROC MIXED, namely DDFM=CONTAIN is applied.
For incomplete data (i.e., missing periods) Satterthwaite’s
approximation of the degrees of freedom (option = 1) or Kenward-Roger (option = 3)
might be better choices – if stated as such in the statistical analysis plan.
The half-width of the confidence interval in log-scale allows a comparison of methods (B
v.s. A) or options (2 v.s. 1). A higher value might
point towards a more conservative decision. Quoting the Q&A-document:
A simple linear mixed model, which assumes identical within-subject
variability (Method B), may be acceptable as long as results obtained
with the two methods do not lead to different regulatory decisions.
However, in borderline cases [...] additional analysis using Method
A might be required.
In the provided reference datasets – with one exception – the conclusion
of BE (based on the mixed CI and GMR criteria)
agrees between ‘Method A’ and ‘Method B’. However, for the
highly incomplete dataset 14 ‘Method A’ was liberal (passing
by ANOVA but failing by the mixed effects model).
Reference-scaling is acceptable for Cmax (immediate release products) and Cmax,ss,
Cτ,ss, and
partialAUC (modified release products). However, quoting the BE guideline:
The applicant should justify that the calculated intra-subject
variability is a reliable estimate and that it is not the result of
outliers.
Quoting the Q&A on the Revised EMA Bioequivalence Guideline:
... a study could be acceptable if the bioequivalence
requirements are met both including the outlier subject (using the
scaled average bioequivalence approach and the within-subject CV with
this subject) and after exclusion of the outlier (using the within-subject
CV without this subject).
An outlier test is not an expectation of the medicines agencies but
outliers could be shown by a box plot. This would allow the medicines
agencies to compare the data between them.
The EMA’s method of reference-scaling for highly
variable drugs / drug products is currently recommended in other jurisdictions
as well (e.g., the WHO; ASEAN States, Australia,
Belarus, Brazil, Chile, Egypt, the Eurasian Economic Union, the East African Community,
New Zealand, the Russian Federation).
Health Canada’s variant of ABEL (upper cap of scaling ~57.4% limiting the expansion
at 67.7–150.0%) is only approximate because a mixed-effects model would be required.
In a pilot phase the WHO accepted reference-scaling for AUC (4-period full replicate
studies are mandatory in order to assess the variability associated with each product).
It was an open issue how this assessment should be done. In Population Bioequivalence (PBE)
and Individual Bioequivalence (IBE) the
swT/swR ratio was assessed and similar
variability was concluded for a ratio within 0.667–1.500. However, the power
of comparing variabilities in a study designed to demonstrate ABE
is low. This was one of the reasons why PBE and IBE were
not implemented in regulatory practice. An alternative approach is given in the
FDA’s draft ANDA guidance. Variabilities are
considered comparable if the upper confidence limit of
σwT/σwR is less
than or equal to 2.5.
In 2021 the requirement of comparing variabilities was lifted by the WHO.
Helmut Schütz, Michael Tomashevskiy, Detlew Labes
European Medicines Agency, Committee for Medicinal Products for Human Use. Guideline on the Investigation of Bioequivalence. CPMP/EWP/QWP/1401/98 Rev. 1/ Corr **. London. 20 January 2010. Online.
European Generic and Biosimilar Medicines Association. 3rdEGA Symposium on Bioequivalence. Questions and Answers on the Revised EMA Bioequivalence Guideline. London. 1 June 2010. Online.
European Medicines Agency, Committee for Medicinal Products for Human Use. Questions & Answers: positions on specific questions addressed to the Pharmacokinetics Working Party (PKWP). EMA/618604/2008 Rev. 13. London. 19 November 2015. Online.
European Medicines Agency. Clinical pharmacology and pharmacokinetics: questions and answers. 3.1 Which statistical method for the analysis of a bioequivalence study does the Agency recommend? Annex I. EMA/582648/2016. London. 21 September 2016. Online.
Executive Board of the Health Ministers’ Council for GCC States. The GCC Guidelines for Bioequivalence. Version 3.0. May 2021. Online.
Health Canada. Guidance Document. Conduct and Analysis of Comparative Bioavailability Studies. Ottawa. 2018/06/08. Online.
European Medicines Agency, Committee for Medicinal Products for Human Use. Guideline on the pharmacokinetic and clinical evaluation of modified release dosage forms. EMA/CPMP/EWP/280/96 Corr1. London. 20 November 2014. Online.
World Health Organization, Prequalification Team: medicines. Guidance Document: Application of reference-scaled criteria for AUC in bioequivalence studies conducted for submission to PQTm. Geneva. 22 November 2018. Online.
World Health Organization. Application of reference-scaled criteria for AUC in bioequivalence studies conducted for submission to PQT/MED. Geneva. 02 July 2021. Online.
U.S. Food and Drug Administration, Center for Drug Evaluation and Research. Draft Guidance for Industry. Bioequivalence Studies with Pharmacokinetic Endpoints for Drugs Submitted Under an ANDA. August 2021. Download.
method.A |
evaluation by a fixed effects model (ANOVA) |
ABE |
evaluation for conventional (unscaled) Average Bioequivalence |
# Importing from a CSV-file, using most of the defaults: variable # separator colon, decimal separator period, no outlier-analyis, # print to file. # Note: You must adapt the path-variables. The example reads from # the data provided by the library. Write-permissions must be granted # for 'path.out' in order to save the result file. Here the default # (R's temporary folder) is used. If you don't know where it is, # type tempdir() in the console. path.in <- paste0(find.package("replicateBE"), "/extdata/") method.B(path.in = path.in, file = "DS", set = "01", ext = "csv") # Should result in: # CVwT : 35.16% # swT : 0.34138 # CVwR : 46.96% (reference-scaling applicable) # swR : 0.44645 # Expanded limits : 71.23% ... 140.40% [100exp(±0.760·swR)] # swT / swR : 0.7647 (similar variabilities of T and R) # sw-ratio (upper CL): 0.9324 (comparable variabilities of T and R) # Confidence interval: 107.17% ... 124.97% pass # Point estimate : 115.73% pass # Mixed (CI & PE) : pass # # Internal reference dataset 01 used and results to R's temporary # folder. Additional outlier-analyis and box plot saved as PNG. method.B(ola = TRUE, plot.bxp = TRUE, data = rds01) # Should give the same as above. Additionally: # Recalculation due to presence of 2 outliers (subj. 45|52) # CVwR (outl. excl.) : 32.16% (reference-scaling applicable) # swR (recalc.) : 0.31374 # Expanded limits : 78.79% ... 126.93% [100exp(±0.760·swR)] # swT / swR (recalc.): 1.0881 (similar variabilities of T and R) # sw-ratio (upper CL): 1.3282 (comparable variabilities of T and R) # Confidence interval: pass # Point estimate : pass # Mixed (CI & PE) : pass # # Same dataset. Show information about outliers and the model-table. method.B(ola = TRUE, print = FALSE, verbose = TRUE, data = rds01) # data.frame of results (full precision) shown in the console. x <- method.B(ola = TRUE, print = FALSE, details = TRUE, data = rds01) print(x, row.names = FALSE) # Compare Method B with Method A for all reference datasets. ds <- substr(grep("rds", unname(unlist(data(package = "replicateBE"))), value = TRUE), start = 1, stop = 5) for (i in seq_along(ds)) { A <- method.A(print=FALSE, details=TRUE, data=eval(parse(text=ds[i])))$BE B <- method.B(print=FALSE, details=TRUE, data=eval(parse(text=ds[i])))$BE r <- paste0("A ", A, ", B ", B, " - ") cat(paste0(ds[i], ":"), r) if (A == B) { cat("Methods A and B agree.\n") } else { if (A == "fail" & B == "pass") { cat("Method A is conservative.\n") } else { cat("Method B is conservative.\n") } } } # should give # rds01: A pass, B pass - Methods A and B agree. # ... # rds14: A pass, B fail - Method B is conservative. # ... # Health Canada: Only the PE of Cmax has to lie within 80.0-125.0% # (i.e., no CI is required). With alpha = 0.5 the CI is practically # supressed (zero width) and ignored in the assessment. x <- method.B(alpha = 0.5, regulator = "HC", option = 1, data = rds03, print = FALSE, details = TRUE)[19:20] x[1] <- round(x[1], 1) # only one decimal place for HC print(x, row.names = FALSE) # Should result in: # PE(%) GMR # 124.5 pass# Importing from a CSV-file, using most of the defaults: variable # separator colon, decimal separator period, no outlier-analyis, # print to file. # Note: You must adapt the path-variables. The example reads from # the data provided by the library. Write-permissions must be granted # for 'path.out' in order to save the result file. Here the default # (R's temporary folder) is used. If you don't know where it is, # type tempdir() in the console. path.in <- paste0(find.package("replicateBE"), "/extdata/") method.B(path.in = path.in, file = "DS", set = "01", ext = "csv") # Should result in: # CVwT : 35.16% # swT : 0.34138 # CVwR : 46.96% (reference-scaling applicable) # swR : 0.44645 # Expanded limits : 71.23% ... 140.40% [100exp(±0.760·swR)] # swT / swR : 0.7647 (similar variabilities of T and R) # sw-ratio (upper CL): 0.9324 (comparable variabilities of T and R) # Confidence interval: 107.17% ... 124.97% pass # Point estimate : 115.73% pass # Mixed (CI & PE) : pass # # Internal reference dataset 01 used and results to R's temporary # folder. Additional outlier-analyis and box plot saved as PNG. method.B(ola = TRUE, plot.bxp = TRUE, data = rds01) # Should give the same as above. Additionally: # Recalculation due to presence of 2 outliers (subj. 45|52) # CVwR (outl. excl.) : 32.16% (reference-scaling applicable) # swR (recalc.) : 0.31374 # Expanded limits : 78.79% ... 126.93% [100exp(±0.760·swR)] # swT / swR (recalc.): 1.0881 (similar variabilities of T and R) # sw-ratio (upper CL): 1.3282 (comparable variabilities of T and R) # Confidence interval: pass # Point estimate : pass # Mixed (CI & PE) : pass # # Same dataset. Show information about outliers and the model-table. method.B(ola = TRUE, print = FALSE, verbose = TRUE, data = rds01) # data.frame of results (full precision) shown in the console. x <- method.B(ola = TRUE, print = FALSE, details = TRUE, data = rds01) print(x, row.names = FALSE) # Compare Method B with Method A for all reference datasets. ds <- substr(grep("rds", unname(unlist(data(package = "replicateBE"))), value = TRUE), start = 1, stop = 5) for (i in seq_along(ds)) { A <- method.A(print=FALSE, details=TRUE, data=eval(parse(text=ds[i])))$BE B <- method.B(print=FALSE, details=TRUE, data=eval(parse(text=ds[i])))$BE r <- paste0("A ", A, ", B ", B, " - ") cat(paste0(ds[i], ":"), r) if (A == B) { cat("Methods A and B agree.\n") } else { if (A == "fail" & B == "pass") { cat("Method A is conservative.\n") } else { cat("Method B is conservative.\n") } } } # should give # rds01: A pass, B pass - Methods A and B agree. # ... # rds14: A pass, B fail - Method B is conservative. # ... # Health Canada: Only the PE of Cmax has to lie within 80.0-125.0% # (i.e., no CI is required). With alpha = 0.5 the CI is practically # supressed (zero width) and ignored in the assessment. x <- method.B(alpha = 0.5, regulator = "HC", option = 1, data = rds03, print = FALSE, details = TRUE)[19:20] x[1] <- round(x[1], 1) # only one decimal place for HC print(x, row.names = FALSE) # Should result in: # PE(%) GMR # 124.5 pass
Datasets of replicate designs from the public domain, edited, or obtained by simulations to be evaluated by method.A(), method.B(), or ABE().
| Design | Specification | Dataset | N | CVwR (%) | Evaluation |
| TRTR|RTRT | full | rds01 |
77 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds06 |
77 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds12 |
77 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds14 |
77 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds18 |
77 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds21 |
77 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds19 |
61 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds20 |
61 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds08 |
222 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds09 |
222 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds13 |
222 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds15 |
222 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds25 |
70 | >30 | method.A(), method.B()
|
| TRTR|RTRT | full | rds29 |
12 | <30 | method.A(), method.B(), ABE()
|
| TRRT|RTTR | full | rds26 |
54 | >30 | method.A(), method.B()
|
| TRRT|RTTR | full | rds05 |
26 | <30 | method.A(), method.B(), ABE()
|
| TRRT|RTTR | full | rds11 |
37 | >30 | method.A(), method.B()
|
| TRRT|RTTR | full | rds16 |
38 | >30 | method.A(), method.B()
|
| TTRR|RRTT | full | rds28 |
64 | <30 | method.A(), method.B(), ABE()
|
| TRTR|RTRT|TRRT|RTTR | full | rds23 |
22 | >30 | method.A(), method.B()
|
| TRRT|RTTR|TTRR|RRTT | full | rds24 |
39 | >30 | method.A(), method.B()
|
| TRT|RTR | full | rds03 |
77 | >30 | method.A(), method.B()
|
| TRT|RTR | full | rds17 |
19 | >30 | method.A(), method.B()
|
| TRR|RTT | full | rds10 |
18 | <30 | method.A(), method.B(), ABE()
|
| TR|RT|TT|RR | Balaam’s | rds27 |
312 | >30 | method.A(), method.B()
|
| TRR|RTR|RRT | partial | rds02 |
24 | <30 | method.A(), method.B(), ABE()
|
| TRR|RTR|RRT | partial | rds04 |
51 | >30 | method.A(), method.B()
|
| TRR|RTR|RRT | partial | rds07 |
360 | >30 | method.A(), method.B()
|
| TRR|RTR|RRT | partial | rds30 |
14 | <30 | method.A(), method.B(), ABE()
|
| TRR|RTR | partial | rds22 |
36 | >30 | method.A(), method.B()
|
In full replicate designs both R and T are administered twice (in 3-period designs to ½ of the subjects).
Balaam’s design is a mixture of a conventional crossover (½ of the subjects) and a replicate design (¼ of the subjects receive either R or T twice).
In partial replicate designs only R is administered twice.
Helmut Schütz (R-code for simulations by Detlew Labes), Michael Tomashevskiy (simulations in Phoenix NLME)
| Dataset | Origin | Description |
rds01 |
EMA | Data set in Annex II |
rds06 |
rds01 edited |
T and R switched |
rds12 |
Phoenix NLME | Simulated with extreme variability |
rds14 |
Phoenix NLME | Simulated with high variability and number of dropouts increasing with period |
rds18 |
rds14 edited |
Removed T data of subjects 63–78 |
rds21 |
rds01 edited |
One extreme result of subjects 45 & 52 set to NA |
rds19 |
rds18 edited |
Removed data of subjects 63–78 |
rds20 |
rds19 edited |
Outlier of R (subject 1) introduced: original value ×100 |
rds08 |
R | Simulated with slight heteroscedasticity |
rds09 |
rds08 |
Wide numeric range (data of last 37 subjects multiplied by 1,000,000) |
rds13 |
rds08 edited |
Highly incomplete (approx. 50% of period 4 data deleted) |
rds15 |
rds08 edited |
Highly incomplete (approx. 50% of period 4 data coded as missing 'NA') |
rds25 |
R | Simulated with heteroscedasticity |
rds29 |
R | Simulated with heteroscedasticity; imbalanced and incomplete |
rds26 |
Patterson & Jones 2016 | Cmax data given in Tables 4.30 & 4.31 |
rds05 |
Shumaker & Metzler | Cmax data given in the Appendix |
rds11 |
Hauschke et al. | Cmax data given in Table 9.6. |
rds16 |
FDA, CDER | Cmax data of Drug 14a |
rds28 |
R | Simulated with homoscedasticity |
rds23 |
FDA, CDER | Cmax data of Drug |
rds24 |
FDA, CDER | Cmax data of Drug 1 |
rds03 |
rds01 edited |
Period 4 removed |
rds17 |
rds03 edited |
Highly unbalanced (twelve subjects in RTR and seven in TRT) |
rds10 |
Chow & Liu | AUC data given in Table 9.3.3. |
rds27 |
R | Simulated with homoscedasticity |
rds02 |
EMA | Data set in Annex III |
rds04 |
Patterson & Jones 2012 | Cmax data of Table II |
rds07 |
R | Simulated with homoscedasticity |
rds30 |
R | Simulated with heteroscedasticity; imbalanced and incomplete |
rds22 |
R | Simulated with homoscedasticity |
European Medicines Agency. London, 21 September 2016. Annex II, Annex III.
Patterson SD, Jones B. Viewpoint: observations on scaled average bioequivalence. Pharm Stat. 2012; 11(1): 1–7. doi:10.1002/pst.498
Shumaker RC, Metzler CM. The Phenytoin Trial is a Case Study of ‘Individual’ Bioequivalence. Drug Inf J. 1998; 32(4): 1063–72. doi:10.1177/009286159803200426
Chow SC, Liu JP. Design and Analysis of Bioavailability and Bioequivalence Studies. Boca Raton: CRC Press; 3rd edition 2009. p275.
Hauschke D, Steinijans VW, Pigeot I. Bioequivalence Studies in Drug Development. Chichester: John Wiley; 2007. p216.
Patterson SD, Jones B. Bioequivalence and Statistics in Clinical Pharmacology. Boca Raton: CRC Press; 2nd edition 2016. p105–6.
U.S. Food and Drug Administration, Center for Drug Evaluation and Research. Bioequivalence Studies. Rockville, 1997. bioequivalence study files (archived 2017-07-23)
4-period full replicates
TRTR.RTRT, TRRT.RTTR, TTRR.RRTT, TRTR.RTRT.TRRT.RTTR, TRRT.RTTR.TTRR.RRTT
2-period replicate (Balaam’s design)
TR.RT.TT.RR
3-period full replicates
TRT.RTR, TRR.RTT
3-period partial replicates
TRR.RTR.RRT, TRR.RTR
# show structure of all data sets ds <- substr(grep("rds", unname(unlist(data(package = "replicateBE"))), value = TRUE), start = 1, stop = 5) for (i in seq_along(ds)) { cat(ds[i], "\n") str(eval(parse(text = ds[i]))) }# show structure of all data sets ds <- substr(grep("rds", unname(unlist(data(package = "replicateBE"))), value = TRUE), start = 1, stop = 5) for (i in seq_along(ds)) { cat(ds[i], "\n") str(eval(parse(text = ds[i]))) }
Dataset for Balaam’s design obtained by simulations to be evaluated by method.A(), method.B().
rds27rds27
Reference Dataset 27 (rds27)
312 subjects. Balanced (78 subjects in each of the four sequences) and incomplete (T of subject 111 missing in period 2 of sequence RT). No outliers.
A data frame with 624 observations on the following 5 variables:
subject |
a factor with 312 levels: 1, 2, ..., 18 |
period |
a factor with 2 levels: 1, 2 |
sequence |
a factor with 4 levels: TR, RT, TT, RR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
| Dataset | N | CVwR (%) | Evaluation |
rds27 |
312 | >30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RR", "RT", "TR", "TT" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
Helmut Schütz (R-code for simulations by Detlew Labes)
| Dataset | Origin | Description |
rds27 |
R | Simulated with CVwT = CVwR = 35%, CVbT = CVbR = 75%, GMR 0.90. |
str(rds27) row <- c(1:2, 157:158, 313:314, 469:470) rds27[row, ] summary(rds27[2:5])str(rds27) row <- c(1:2, 157:158, 313:314, 469:470) rds27[row, ] summary(rds27[2:5])
Dataset simulated to be evaluated by method.A(), method.B().
rds22rds22
Reference dataset 22
Simulated with CVwT = CVwR = 45%, CVbT = CVbR = 100% GMR 0.90. 42 subjects.
Balanced (21 subjects in each of the sequences) and complete (no missing data). No outliers.
A data frame with 126 observations on the following 5 variables:
subject |
a factor with 42 levels: 1, 2, ..., 42 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 2 levels: TRR, RTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
logPK |
a numeric vector of the natural logarithms of PK
|
| Dataset | N | CwR (%) | Evaluation |
rds22 |
42 | >30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RTR", "TRR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
This partial replicate design is also known as the ‘extra-reference design’. Since the Test is not administered in all periods, lacking period effects must be assumed. In the presence of true period effects the treatment comparison will be biased. Hence, this design is not recommended.
Helmut Schütz (R-code for simulations by Detlew Labes)
| Dataset | Origin | Description |
rds22 |
R | Simulated with homoscedasticity. |
str(rds22) rds22[61:66, ] summary(rds22[2:5])str(rds22) rds22[61:66, ] summary(rds22[2:5])
Datasets from the public domain or simulated to be evaluated by method.A(), method.B(), or ABE().
Reference Dataset 02
24 subjects.
Balanced (eight subjects in each of the three sequences) and complete (no missing data). No outliers.
A data frame with 72 observations on the following 6 variables:
subject |
a factor with 24 levels: 1, 2, ..., 24 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 3 levels: TRR, RTR, RRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
logPK |
a numeric vector of the natural logarithms of PK
|
In the source evaluated by SAS v9.1 (Proc GLM) for ABEL. Reported results:
CVwR |
11.2% |
PE |
102.26% (Method A and B) |
90% CI |
97.32% – 107.46% (Method A and B) |
Reference Dataset 04
Data set of Table II given by Patterson & Jones. 51 subjects.
Balanced (17 subjects in each of the three sequences) and complete. No outliers.
A data frame with 153 observations on the following 5 variables:
subject |
a factor with 51 levels: 1, 2, ..., 56 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 3 levels: TRR, RTR, RRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses (here Cmax) |
In the source evaluated by SAS (Proc MIXED) with the FDA’s mixed effects model (termed ‘Method C’ by the EMA; not compatible with the guideline). Reported results:
CVwR |
61% |
PE |
137% |
90% CI |
119% – 159% |
Reference Dataset 07
Simulated with CVwT = CVwR = 35%, GMR 0.90. 360 subjects.
Balanced (120 subjects in each of the three sequences) and complete. No outliers.
A data frame with 1,080 observations on the following 5 variables:
subject |
a factor with 360 levels: 1, 2, ..., 360 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 3 levels: TRR, RTR, RRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference Dataset 30
Simulated with heteroscedasticity (CVwT = 14%, CVwR = 28%, CVbT = 28%, CVbR = 56%), GMR = 0.90. 12 subjects. 14 subjects.
Imbalanced (six subjects in sequence TRR, five in RTR, and three RRT) and incomplete (two missings in sequences TRR and RTR and three in sequence RRT). Missings / period: 0/1, 0/2, 7/3. No outliers.
A data frame with 35 observations on the following 5 variables:
subject |
a factor with 14 levels: 1, 2, ..., 39 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 3 levels: TRR, RTR, RRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
| Dataset | N | CVwR (%) | Evaluation |
rds02 |
24 | <30 | method.A(), method.B(), ABE()
|
rds04 |
51 | >30 | method.A(), method.B()
|
rds07 |
360 | >30 | method.A(), method.B()
|
rds30 |
14 | <30 | method.A(), method.B(), ABE()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RRT", "RTR", "TRR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
Helmut Schütz (R-code for simulations by Detlew Labes)
| Dataset | Origin | Description |
rds02 |
EMA | Annex III. |
rds04 |
Patterson & Jones | Cmax data of Table II. |
rds07 |
R | Large simulated data set with homoscedasticity. |
rds30 |
R | Simulated with heteroscedasticity; imbalanced and incomplete. |
European Medicines Agency. London, 21 September 2016. Annex I, Annex III.
Patterson SD, Jones B. Viewpoint: observations on scaled average bioequivalence. Pharm Stat. 2012; 11(1): 1–7. doi:10.1002/pst.498
str(rds02) row <- c(10:12, 1:3, 16:18) rds02[row, ] summary(rds02[2:6])str(rds02) row <- c(10:12, 1:3, 16:18) rds02[row, ] summary(rds02[2:6])
Dataset from the public domain to be evaluated by method.A(), method.B(), or ABE().
rds10rds10
Reference Dataset 10
18 subjects.
Balanced (nine subjects in both sequences) and complete. No outliers.
A data frame with 54 observations on the following 5 variables:
subject |
a factor with 18 levels: 1, 2, ..., 18 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 2 levels: TRR, RTT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses (here AUC) |
| Dataset | N | CVwR (%) | Evaluation |
rds10 |
36 | <30 | method.A(), method.B(), ABE()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RTT", "TRR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
In analogy to the EMA’s Q&A: Uncertain estimate of CVwR since less than twelve subjects in sequence TRR.
| Dataset | Origin | Description |
rds10 |
Chow & Liu | AUC data given in Table 9.3.3. |
Chow SC, Liu JP. Design and Analysis of Bioavailability and Bioequivalence Studies. Boca Raton: CRC Press; 3rd edition 2009. p275.
str(rds10) row <- c(1:3, 28:30) rds10[row, ] summary(rds10[2:5])str(rds10) row <- c(1:3, 28:30) rds10[row, ] summary(rds10[2:5])
Datasets from the public domain to be evaluated by method.A(), method.B(), or ABE().
Reference Dataset 05
26 subjects.
Balanced (13 subjects in both sequences) and complete. No outliers.
A data frame with 104 observations on the following 5 variables:
subject |
a factor with 26 levels: 1, 2, ..., 26 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRRT, RTTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses (here Cmax) |
In the source evaluated by SAS (Prox MIXED) with the FDA’s mixed effects model (termed ‘Method C’ by the EMA; not compatible with the guideline). Reported results:
CVwR |
5.47% |
CVwT |
6.75% |
PE |
107.90% |
90% CI |
103.66% – 112.2% |
Reference Dataset 11
37 subjects.
Unbalanced (18 subjects in sequence TRRT and 19 subjects in RTTR) and complete. No outliers.
A data frame with 148 observations on the following 5 variables
subject |
a factor with 37 levels: 1, 2, ..., 37 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRRT, RTTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses (here Cmax) |
In the source evaluated by SAS (Proc MIXED) with the FDA’s mixed effects model (termed ‘Method C’ by the EMA; not compatible with the guideline). Reported results:
PE |
90.0% |
90% CI |
79.6% – 101.7% |
Reference Dataset 16
38 subjects.
Unbalanced (18 subjects in sequence TRRT and 20 in RTTR) and complete. No outliers.
A data frame with 152 observations on the following 5 variables:
subject |
a factor with 38 levels: 1, 2, ..., 38 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRRT, RTTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses (here Cmax) |
| Dataset | N | CVwR (%) | Evaluation |
rds05 |
26 | <30 | method.A(), method.B(), ABE()
|
rds11 |
37 | >30 | method.A(), method.B()
|
rds16 |
38 | >30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RTTR", "TRRT" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
| Dataset | Origin | Description |
rds05 |
Shumaker & Metzler | Cmax data given in the Appendix. |
rds11 |
Hauschke et al. | Cmax data given in Table 9.6. |
rds16 |
FDA, CDER | Cmax data of Drug 14a. |
Shumaker RC, Metzler CM. The Phenytoin Trial is a Case Study of ‘Individual’ Bioequivalence. Drug Inf J. 1998; 32(4): 1063–72. doi:10.1177/009286159803200426
Hauschke D, Steinijans VW, Pigeot I. Bioequivalence Studies in Drug Development. Chichester: John Wiley; 2007. p216.
U.S. Food and Drug Administration, Center for Drug Evaluation and Research. Bioequivalence Studies. Rockville, 1997. bioequivalence study files (archived 2017-07-23)
str(rds05) summary(rds05[2:5]) head(rds11, 8)str(rds05) summary(rds05[2:5]) head(rds11, 8)
Dataset from the public domain to be evaluated by method.A() and/or method.B().
Reference Dataset 24
40 subjects (one completely missing).
Unbalanced (nine subjects in sequence TRRT and ten in each of the other three) and complete. Two outliers (subject 3 in sequence RTTR and subject 30 in sequence TTRR).
A data frame with 160 observations on the following 5 variables:
subject |
a factor with 40 levels: 1, 2, ..., 932 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 4 levels: TRRT, RTTR, TTRR, RRTT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling (here Cmax) |
| Dataset | N | CVwR (%) | Evaluation |
rds24 |
39 | >30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RRTT", "RTTR", "TRRT", "TTRR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
| Dataset | Origin | Description |
rds24 |
FDA, CDER | Cmax data of Drug 1. |
U.S. Food and Drug Administration, Center for Drug Evaluation and Research. Bioequivalence Studies. Rockville, 1997. bioequivalence study files (archived 2017-07-23)
str(rds24) row <- c(13:16, 9:12, 1:4, 5:8) rds24[row, ] summary(rds24[2:5])str(rds24) row <- c(13:16, 9:12, 1:4, 5:8) rds24[row, ] summary(rds24[2:5])
Datasets from the public domain and edited to be evaluated by method.A() and/or method.B().
Reference dataset 03
Based on rds01. Removed all data of period 4. 77 subjects.
Unbalanced (39 subjects in sequence TRT and 38 in RTR) and incomplete (six missings in sequence TRT and two in RTR). Missings / period: 0/1, 1/2, 7/3. Two outliers (subjects 45 and 52) in sequence RTR.
A data frame with 223 observations on the following 6 variables:
subject |
a factor with 77 levels: 1, 2, ..., 78 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 2 levels: TRT, RTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 17
Based on rds03. 19 subjects.
Unbalanced (seven subjects in sequence TRT and twelve in RTR) and incomplete (one missing in sequence TRT). Missings / period: 0/1, 0/2, 1/3. One outlier (subject 18) in sequence RTR.
A data frame with 56 observations on the following 6 variables:
subject |
a factor with 19 levels: 1, 2, ..., 22 |
period |
a factor with 3 levels: 1, 2, 3 |
sequence |
a factor with 2 levels: TRT, RTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
| Dataset | N | CVwR (%) | Evaluation |
rds03 |
77 | >30 | method.A(), method.B()
|
rds17 |
19 | >30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RTR", "TRT" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
Helmut Schütz
| Dataset | Origin | Description |
rds03 |
rds01 edited |
Period 4 removed. |
rds17 |
rds03 edited |
Highly unbalanced (seven subjects in TRT and twelve in RTR). |
head(rds03, 6) summary(rds03[2:5])head(rds03, 6) summary(rds03[2:5])
Datasets from the public domain, edited, or obtained by simulations to be evaluated by method.A() and/or method.B().
Reference dataset 01
77 subjects.
Unbalanced (39 subjects in sequence TRTR and 38 in RTRT) and incomplete (seven missings in sequence TRTR and three in sequence RTRT). Missings / period: 0/1, 1/2, 7/3, 2/4. Two outliers (subjects 45 and 52) in sequence RTRT.
A data frame with 298 observations on the following 6 variables:
subject |
a factor with 77 levels: 1, 2, ..., 78 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
logPK |
a numeric vector of the natural logarithms of PK
|
In the source evaluated by SAS (Proc GLM) v9.1 for ABEL. Reported results:
CVwR |
47.0% |
PE |
115.66% (Method A) |
| 115.73% (Method B) | |
90% CI |
107.11% – 124.89% (Method A) |
| 107.17% – 124.97% (Method B) |
Reference dataset 06
Based on rds01. 77 subjects. Responses of T and R switched.
Unbalanced (39 subjects in sequence TRTR and 38 in RTRT) and incomplete (seven missings in sequence TRTR and three in sequence RTRT). Missings / period: 0/1, 1/2, 7/3, 2/4. No outliers.
A data frame with 298 observations on the following 6 variables:
subject |
a factor with 77 levels: 1, 2, ..., 78 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 08
Simulated with slight heteroscedasticity (CVwT = 70%, CVwR = 80%), CVbT = CVbR = 150%, GMR = 0.85. 222 subjects.
Balanced (222 subjects in both sequences) and complete. No outliers.
The extreme sample size results from high variability, an assumed true GMR 0.85, and target power 90%.
A data frame with 888 observations on the following 5 variables:
subject |
a factor with 222 levels: 1, 2, ..., 222 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 09
Based on rds08. Wide numeric range (data of last 37 subjects multiplied by 1,000,000). 222 subjects.
Balanced (222 subjects in both sequences) and complete. No outliers.
A data frame with 888 observations on the following 5 variables:
subject |
a factor with 222 levels: 1, 2, ..., 222 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 12
Simulated with extreme intra- and intersubject variability, GMR = 1.6487. 77 subjects.
Unbalanced (39 subjects in sequence TRTR and 38 in RTRT) and incomplete (seven missings in sequence TRTR and three in sequence RTRT). Missings / period: 0/1, 1/2, 7/3, 2/4. No outliers.
A data frame with 298 observations on the following 6 variables:
subject |
a factor with 77 levels: 1, 2, ..., 78 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 13
Based on rds08. Highly incomplete (approx. 50% of period 4 data deleted). 222 subjects.
Balanced (111 subjects in both sequences) and incomplete (56 missings in both sequences). Missings / period: 0/0, 0/0, 0/0, 112/4. No outliers.
A data frame with 776 observations on the following 5 variables:
subject |
a factor with 222 levels: 1, 2, ..., 222 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 14
Simulated with high variability, GMR = 1. Dropouts as a hazard function growing with period. 77 subjects.
Unbalanced (39 subjects in sequence TRTR and 38 in RTRT) and incomplete (18 missings in sequence TRTR and 17 in sequence RTRT). Missings / period: 0/1, 4/2, 12/3, 19/4. No outliers.
A data frame with 273 observations on the following 6 variables:
subject |
a factor with 77 levels: 1, 2, ..., 78 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 15
Based on ref08. Highly incomplete (approx. 50% of period 4 data coded as missing 'NA'). 222 subjects.
Balanced (111 subjects in both sequences) and incomplete (56 missings in both sequences). Missings / period: 0/1, 0/2, 0/3, 112/4. No outliers.
A data frame with 888 observations (112 NA) on the following 5 variables
subject |
a factor with 222 levels: 1, 2, ..., 222 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 18
Data set based on rds14. Removed T data of subjects 63–78. 77 subjects.
Unbalanced (39 subjects in sequence TRTR and 38 in RTRT) and incomplete (32 missings in sequence TRTR and 31 in sequence RTRT). Missings / period: 8/1, 12/2, 18/3, 25/4. No outliers.
A data frame with 245 observations on the following 6 variables:
subject |
a factor with 77 levels: 1, 2, ..., 78 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 19
Data set based on rds18. Removed data of subjects 63–78. 61 subjects.
Unbalanced (31 subjects in sequence TRTR and 30 in RTRT) and incomplete (14 missings in both sequences). Missings / period: 0/1, 4/2, 9/3, 15/4. Two outliers (subjects 18 and 51 in sequence RTRT).
A data frame with 216 observations on the following 6 variables:
subject |
a factor with 61 levels: 1, 2, ..., 62 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 20
Data set based on rds19. Extreme outlier of R (subject 1) introduced: original value ×100). 61 subjects.
Unbalanced (31 subjects in sequence TRTR and 30 in RTRT) and incomplete (14 missings in both sequences). Missings / period: 0/1, 4/2, 9/3, 15/4. Two outliers (subjects 1 and 51 in sequence RTRT).
A data frame with 216 observations on the following 6 variables:
subject |
a factor with 61 levels: 1, 2, ..., 62 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 21
Based on rds01. 77 subjects. One extreme result of subjects 45 & 52 set to NA.
Unbalanced (39 subjects in sequence TRTR and 38 in RTRT) and incomplete (seven missings in sequence TRTR and five in sequence RTRT). Missings / period: 1/1, 1/2, 8/3, 2/4. No outliers.
A data frame with 298 observations (2 NA) on the following 6 variables:
subject |
a factor with 61 levels: 1, 2, ..., 62 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 25
Simulated with heteroscedasticity (CVwT = 50%, CVwR = 80%), CVbT = CVbR = 130%, GMR = 0.85. 70 subjects.
Balanced (70 subjects in both sequences) and complete. No outliers.
A data frame with 280 observations on the following 5 variables:
subject |
a factor with 70 levels: 1, 2, ..., 70 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
Reference dataset 26
54 subjects.
Balanced (27 subjects in both sequences) and incomplete (two missings in both sequences). Missings / period: 0/1, 0/2, 2/3, 2/4. One outlier (subject 49) in sequence RTRT.
A data frame with 216 observations on the following 5 variables:
subject |
a factor with 54 levels: 1, 2, ..., 57 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling (here Cmax) |
In the source evaluated by SAS (Proc GLM) for ABEL. Reported results (Method A):
CVwR |
60.25% |
PE |
151.3% |
90% CI |
133.5% – 171.4% |
Reference dataset 29
Simulated with heteroscedasticity (CVwT = 14%, CVwR = 28%, CVbT = 28%, CVbR = 56%), GMR = 0.90. 12 subjects.
Imbalanced (five subjects in sequence TRTR and seven in sequence RTRT) and incomplete (three missings in sequence TRTR and four in sequence RTRT). Missings / period: 0/1, 1/2, 2/3, 4/4. One outlier (subject 11) in sequence RTRT.
A data frame with 41 observations on the following 5 variables:
subject |
a factor with 12 levels: 1, 2, ..., 20 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TRTR, RTRT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
| Dataset | N | CVwR (%) | Evaluation |
rds01 |
77 | >30 | method.A(), method.B()
|
rds06 |
77 | >30 | method.A(), method.B()
|
rds08 |
222 | >30 | method.A(), method.B()
|
rds09 |
222 | >30 | method.A(), method.B()
|
rds12 |
77 | >30 | method.A(), method.B()
|
rds13 |
222 | >30 | method.A(), method.B()
|
rds14 |
77 | >30 | method.A(), method.B()
|
rds15 |
222 | >30 | method.A(), method.B()
|
rds18 |
77 | >30 | method.A(), method.B()
|
rds19 |
61 | >30 | method.A(), method.B()
|
rds20 |
61 | >30 | method.A(), method.B()
|
rds21 |
77 | >30 | method.A(), method.B()
|
rds25 |
70 | >30 | method.A(), method.B()
|
rds26 |
54 | >30 | method.A(), method.B()
|
rds29 |
12 | <30 | method.A(), method.B(), ABE()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RTRT", "TRTR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
Helmut Schütz (R-code for simulations by Detlew Labes), Michael Tomashevskiy (simulations in Phoenix NLME)
| Dataset | Origin | Description |
rds01 |
EMA | Annex II. |
rds06 |
rds01 edited |
T and R switched. |
rds08 |
R | Large simulated data set with slight heteroscedasticity. |
rds09 |
rds08 |
Wide numeric range (data of last 37 subjects multiplied by 1,000,000). |
rds12 |
Phoenix NLME | Simulated with extreme intra- and intersubject variability. |
rds13 |
rds08 edited |
Highly incomplete (approx. 50% of period 4 data deleted). |
rds14 |
Phoenix NLME | Simulated with high intra-/intersubject variability and |
| number of dropouts increasing with period. | ||
rds15 |
rds08 edited |
Highly incomplete (approx. 50% of period 4 data coded as missing 'NA'). |
rds18 |
rds14 edited |
Removed T data of subjects 63–78. |
rds19 |
rds18 edited |
Removed data of subjects 63–78. |
rds20 |
rds19 edited |
Outlier of R (subject 1) introduced: original value ×100. |
rds21 |
rds01 edited |
One extreme result of subjects 45 & 52 set to NA. |
rds25 |
R | Simulated with heteroscedasticity. |
rds26 |
Patterson & Jones | Cmax data given in Tables 4.40 and 4.31. |
rds29 |
R | Simulated with heteroscedasticity; imbalanced and incomplete. |
European Medicines Agency. London, 21 September 2016. Annex I, Annex II.
Patterson SD, Jones B. Bioequivalence and Statistics in Clinical Pharmacology. Boca Raton: CRC Press; 2nd edition 2016. p105–6.
str(rds01) summary(rds01[2:6])str(rds01) summary(rds01[2:6])
Dataset from the public domain to be evaluated by method.A() and/or method.B().
Reference Dataset 23
22 subjects.
Unbalanced (four subjects in sequence RTRT and six in each of the other three) and complete. Two outliers (subjects 8 and 17) in sequence TRTR.
A data frame with 88 observations on the following 5 variables:
subject |
a factor with 22 levels: 1, 2, ..., 27 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 4 levels: TRTR, RTRT, TRRT, RTTR |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling (here Cmax) |
| Dataset | N | CVwR (%) | Evaluation |
rds23 |
22 | >30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RTRT", "RTTR", "TRRT", "TRTR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
| Data set | Origin | Description |
rds23 |
FDA, CDER | Cmax data of Drug 7. |
U.S. Food and Drug Administration, Center for Drug Evaluation and Research. Bioequivalence Studies. Rockville, 1997. bioequivalence study files (archived 2017-07-23)
str(rds23) row <- c(25:28, 5:8, 9:12, 1:4) rds23[row, ] summary(rds23[2:5])str(rds23) row <- c(25:28, 5:8, 9:12, 1:4) rds23[row, ] summary(rds23[2:5])
Dataset obtained by simulations to be evaluated by method.A() and/or method.B().
Reference Dataset 28
64 subjects. Balanced (64 subjects in both sequences) and complete. No outliers.
A data frame with 256 observations on the following 5 variables:
subject |
a factor with 64 levels: 1, 2, ..., 64 |
period |
a factor with 4 levels: 1, 2, 3, 4 |
sequence |
a factor with 2 levels: TTRR, RRTT |
treatment |
a factor with 2 levels: T, R |
PK |
a numeric vector of pharmacokinetic responses acceptable for reference-scaling |
| Dataset | N | CVwR (%) | Evaluation |
rds28 |
64 | <30 | method.A(), method.B()
|
In software sequences and treatments are ranked in lexical order. Hence, executing str() or summary() will show sequence as "RRTT", "TTRR" and treatment as "R", "T". In BE – by convention – sequences are ordered with T first. The package follows this convention.
Helmut Schütz (R-code for simulations by Detlew Labes)
| Dataset | Origin | Description |
rds28 |
R | Simulated with CVwT = CVwR = 35%, CVbT = CVbR = 75%, GMR 0.90. |
str(rds28) summary(rds28[1:5])str(rds28) summary(rds28[1:5])