Skip to contents

be_assess() performs a complete bioequivalence (BE) assessment of one or more noncompartmental endpoints against a regulatory framework, including reference scaling and the pass/fail decision. It accepts the results of pk.nca() directly (a PKNCAresults object) or a tidy long data.frame, so the same workflow that produces NCA parameters flows into the regulatory decision. It is a thin wrapper over be_fit_models() that adds the be_assess class and its print/summary methods.

Usage

be_assess(object, ...)

# Default S3 method
be_assess(
  object,
  reference_col,
  reference_value,
  endpoints = c("cmax", "aucinf.obs", "aucinf.pred", "auclast"),
  regulator = "ABE",
  model_type = NULL,
  alpha = 0.1,
  subject = NULL,
  sequence = NULL,
  period = NULL,
  design = NULL,
  covariates = NULL,
  heteroscedastic = FALSE,
  ...
)

# S3 method for class 'PKNCAresults_sparse_bootstrap'
be_assess(
  object,
  reference_col,
  reference_value,
  endpoints = c("cmax", "aucinf.obs", "aucinf.pred", "auclast"),
  regulator = "ABE",
  model_type = NULL,
  alpha = 0.1,
  subject = NULL,
  sequence = NULL,
  period = NULL,
  design = NULL,
  covariates = NULL,
  heteroscedastic = FALSE,
  ...
)

Arguments

object

A PKNCAresults object or a tidy long data.frame with a PPTESTCD column of parameter names, a PPORRES/PPSTRES column of values, and subject/sequence/period/treatment columns. The results of a sparse bootstrap (from a PKNCAconc object made by sparse_bootstrap()) are compared with the percentile intervals of the bootstrap replicates (Shen and Machado 2017); see Details.

...

Arguments passed to the methods

reference_col

The column identifying the formulation/treatment.

reference_value

The value of reference_col that is the reference formulation.

endpoints

Character vector of NCA parameters (matched against PPTESTCD) to assess.

regulator

The regulatory framework (see be_regulator()); one of "ABE", "EMA", "HC", "GCC", "FDA", "NTID", "HVNTID", or "descriptive" (no acceptance limits or pass/fail).

model_type

The model for the average-BE point estimate, one of "lmer" (mixed model, for crossover/replicate designs), "anova" (fixed-effects, for parallel designs), "isc" (intra-subject contrasts, the FDA reference-scaled path), "nlme" (mixed model with treatment-specific residual variances, for crossover/replicate designs), or "gls" (generalized least squares with treatment-specific residual variances, for parallel designs). When NULL (default) it is chosen from the design, the regulator, and heteroscedastic.

alpha

The significance level; the confidence interval has level 1 - alpha (default 0.10 gives the 90% interval).

subject, sequence, period

Column names for the subject, randomization sequence, and period. When NULL they are taken from the PKNCAresults object or detected from common column names. sequence may be absent.

design

An optional be_design() object; computed from the data when NULL.

covariates

An optional character vector of column names added to every model as additive fixed effects (numeric columns as linear terms, character or factor columns as factors). They must not be missing in any analyzed row. For a PKNCAresults object they must be columns of as.data.frame(object), which means grouping columns. The within-subject variances used for reference scaling and the intra-subject contrasts do not use covariates.

heteroscedastic

Logical. When TRUE, estimate a separate residual variance for each treatment (see Details).

Value

An object of class be_assess (a data.frame), ordered by endpoint (in the order requested) then by test formulation (reference-first), with one row per endpoint and test formulation and the columns endpoint, test, n (the number of subjects behind the ratio shown; see Details), design, units (the endpoint's measurement units; the column is omitted with a warning when units are not provided), the reference and test geometric means with their 90% confidence intervals on the measurement scale (gm_reference, gm_reference_lower, gm_reference_upper, gm_test, gm_test_lower, gm_test_upper), gmr_percent, ci_lower, ci_upper, cvwr_percent, cvwt_percent, swr, limit_lower, limit_upper, criterion, regulator, model_type, and pass. limit_* are NA for the RSABE criterion and criterion is NA for the limit-based frameworks. For regulator = "descriptive" the limit_lower, limit_upper, criterion, and pass columns are omitted. A caption attribute documents the model and the decision rule, or states that no regulatory decision was applied.

Details

The model type is selected automatically from the design and the regulator. By design, a parallel study (one measurement per subject) uses a fixed-effects ANOVA ("anova"), while a crossover or replicate study (repeated measures per subject) uses the mixed model ("lmer") for the geometric mean ratio and its confidence interval. The FDA reference-scaled frameworks (FDA RSABE, NTID, HVNTID) always use intra-subject contrasts ("isc"), as the guidances specify, regardless of design. Each subject's contrast is its mean log test minus its mean log reference, from the subjects with every test and reference administration their sequence calls for; the ratio is the unweighted mean of the sequence means of the contrasts, with n - m degrees of freedom for n subjects in m sequences (FDA draft guidances on progesterone and warfarin sodium). Without a sequence column, a subject's sequence is its treatment-by-period pattern. The unscaled 80.00-125.00% criterion of these frameworks (FDA RSABE when swR < 0.294, NTID, and HVNTID) uses the model of model_type; the default "isc" is the guidance mixed-effects model for replicate designs: fixed sequence, period, and treatment effects, correlated treatment random effects for each subject, a residual variance per treatment, REML, and Satterthwaite degrees of freedom (SAS RANDOM TRT/TYPE=FA0(2), REPEATED/GRP=TRT). A formulation that no subject receives twice has its residual variance folded into its between-subject variance, where the guidance model is over-specified, and a subject missing a period forms its own sequence when the sequence is derived from the treatment pattern. When the mixed model cannot be fit (for example, a formulation whose replicates agree exactly), only a decision that needs the unscaled criterion stops with an error. Each row shows the ratio and interval its decision used: the intra-subject contrasts for the reference-scaled criterion and the model for the unscaled one, and n counts the subjects behind that ratio: for the intra-subject contrasts, the subjects with every test and reference administration their sequence calls for; for the model, every subject with the test or the reference formulation. Pass model_type to override ("lmer", "anova", "isc", "nlme", or "gls"); with "isc" the FDA mixed model also gives the ratio for the other frameworks, and a design without a replicated formulation keeps the fixed-effects ANOVA ratio. Within-subject variability for the FDA frameworks uses the FDA estimator from within-sequence differences between replicate administrations (model_type = "isc" in be_within_var()); for the other frameworks it uses the EMA ANOVA estimator for the "lmer"/"anova"/"isc" paths and the treatment-specific mixed-model estimator for "nlme".

With heteroscedastic = TRUE the residual variance is estimated separately for each treatment: a crossover or replicate study uses nlme::lme() with varIdent(~ 1 | treatment) ("nlme"), and a parallel study uses nlme::gls() with the same variance structure ("gls"). lme4::lmer() cannot estimate treatment-specific residual variances (its weights are fixed prior weights), so heteroscedastic = TRUE with model_type = "lmer" is an error. Without reference scaling, "nlme" accepts non-replicated designs and several test formulations; with reference scaling it needs a fully replicated design and one test formulation, because the per-formulation variances are then used as the within-subject variances.

regulator = "descriptive" estimates the geometric means, their ratio, and its confidence interval exactly as for "ABE" but applies no acceptance limits and reports no pass/fail, for comparisons such as food effect and drug-drug interaction studies.

For the results of a sparse bootstrap (Shen and Machado 2017; see sparse_bootstrap()), there is one estimate per treatment, from the sparse data, rather than one per subject. The ratio of the test and reference estimates is the point estimate, and its confidence interval is the percentile interval of the ratios of the bootstrap replicates (model_type = "bootstrap"). The gm_* columns hold the estimates of each treatment with their percentile intervals. A parallel design resamples the treatments independently; for a crossover, give the treatment column as paired to sparse_bootstrap(). There is no within-subject variance, so only the "ABE" and "descriptive" frameworks apply, and the results may have no groups other than reference_col (filter them first).

Methods (by class)

  • be_assess(PKNCAresults_sparse_bootstrap): Bioequivalence from the percentile intervals of a sparse bootstrap (Shen and Machado 2017)

References

Shen M, Machado SG. Bioequivalence evaluation of sparse sampling pharmacokinetics data using bootstrap resampling method. Journal of Biopharmaceutical Statistics. 2017;27(2):257-264. doi:10.1080/10543406.2016.1265543

Examples

# A replicate-design crossover in long (PPTESTCD/PPORRES) format
set.seed(1)
nsub <- 24
seqs <- rep(c("TRTR", "RTRT"), length.out = nsub)
b <- stats::rnorm(nsub, sd = 0.4)
d <- do.call(rbind, lapply(seq_len(nsub), function(i) {
  trt <- strsplit(seqs[i], "")[[1]]
  data.frame(
    subject = i, sequence = seqs[i], period = seq_along(trt), treatment = trt,
    PPTESTCD = "auclast",
    PPORRES = exp(log(100) + ifelse(trt == "T", 0.04, 0) + b[i] +
                    stats::rnorm(length(trt), sd = 0.45))
  )
}))
be_assess(d, reference_col = "treatment", reference_value = "R",
          endpoints = "auclast", regulator = "EMA")
#> Warning: Units were not found in the data; omitting the `units` column. Supply units via a PKNCAresults object or `PPSTRESU`/`PPORRESU` columns.
#> Bioequivalence assessment: EMA (model_type lmer, 90% CI)
#> Design: full_replicate
#> 
#>  endpoint test  n         design gm_reference gm_reference_lower
#>   auclast    T 24 full_replicate       114.44              95.46
#>  gm_reference_upper gm_test gm_test_lower gm_test_upper gmr_percent ci_lower
#>               137.2  112.15         93.55        134.46          98    85.72
#>  ci_upper cvwr_percent cvwt_percent  swr limit_lower limit_upper criterion
#>    112.04        34.11        47.67 0.33       77.71      128.68        NA
#>  regulator model_type pass
#>        EMA       lmer TRUE
#> 
#> Caption: EMA bioequivalence assessment (90% CI). Geometric means and the geometric mean ratio are least-squares means from a mixed-effects model (lmerTest::lmer, Satterthwaite degrees of freedom); the 90% CI comes from exponentiated least-squares-mean differences (emmeans). Acceptance limits are widened by the within-reference variability (ABEL) and capped per the regulator. Within-formulation variances (swR, swT) are estimated by ANOVA on each formulation's replicates.
#>