mimcr function

Model-independent multivariate confidence region (MIMCR) procedure

Model-independent multivariate confidence region (MIMCR) procedure

The function mimcr() assesses the equivalence of highly variable dissolution profiles. It does so by applying different methods proposed in the literature, implementing the non-parametric Model-Independent Multivariate Confidence Region (MIMCR) procedure and the T^2 test for equivalence of dissolution data as proposed by Hoffelder (2016).

mimcr( data, tcol, grouping, fit_n_obs = FALSE, mtad = 10, signif = 0.05, max_trial = 50, bounds = c(1, 85), nsf = c(1, 2), tol = 1e-09 )

Arguments

  • data: A data frame with the dissolution profile data in wide format.

  • tcol: A vector of indices that specifies the columns in data

    which contain the % release values. The length of tcol must be two or longer.

  • grouping: A character string that specifies the column in data

    that contains the group names (i.e. a factorial variable, e.g., for the differentiation of batches or formulations of a drug product).

  • fit_n_obs: A logical value that indicates whether the number of rows per level in the column specified by the grouping parameter should be adjusted to be equal given that they are not equal. The default is FALSE because for this type of analysis each group should have the same number of observations. If fit_n_obs is TRUE, redundant observations from the level with more observations are dropped, i.e. only the observations 1:n (n: number of observations of the level with the fewer observations) will be used for the comparison of the two groups.

  • mtad: A numeric value that specifies the maximum tolerable average difference (MTAD) of the profiles of two formulations at all time points (in %). The default value is 10. It determines the size of the similarity limit dgd_g (see the details section for more information).

  • signif: A positive numeric value between 0 and 1 that specifies the significance level for the calculation of the Confidence Region (CR). The coverage of CR is (1signif)100(1 - signif) 100%. The default value is 0.05.

  • max_trial: A positive integer that specifies the maximum number of Newton-Raphson search rounds to be performed.

  • bounds: A numeric vector of the form c(lower, upper) that specifies the lower and upper limits, respectively, for the % drug release. The default is c(1, 85). Mean % release values of any of the two groups being compared that are smaller than or equal to the lower bound are ignored and only the first mean % release value that is greater than or equal to the upper bound is included while all the subsequent values are ignored.

  • nsf: A vector of positive integers that specify the number of significant figures (nsf) of the corresponding values of the bounds parameter. It must thus have the same length as the bounds parameter. Before the % release values are compared with the limits that are specified by the bounds parameter, they are rounded to the corresponding number of significant figures as specified by the nsf parameter.

  • tol: A non-negative numeric that specifies the accepted minimal difference between two consecutive search rounds.

Returns

An object of class ‘mimcr’ is returned, containing the following list elements: - Similarity: Conclusion concerning similarity.

  • Parameters: Parameters calculated during the assessment.

  • NR.CI: List with results from the Newton-Raphson (NR) search.

  • Profile.TP: A named numeric vector of the columns in data

    specified by tcol. Given that the column names contain extractable numeric information, e.g., the testing time points of the dissolution profile, it contains the corresponding numeric values. Elements where no numeric information could be extracted are NA.

The Parameters element contains the following information: - dm: The Mahalanobis distance of the samples.

  • df1: Degrees of freedom (number of variables or time points).

  • df2: Degrees of freedom (number of rows - number of variables - 1).

  • alpha: The provided significance level.

  • K: Scaling factor for FF to account for the distribution of the T2T^2 statistic.

  • k: Scaling factor for the squared Mahalanobis distance to obtain the T2T^2 statistic.

  • T2: Hotelling's T2T^2 statistic (FF-distributed).

  • F: Observed FF value.

  • ncp.Hoffelder: Non-centrality parameter for calculation of the FF

    statistic (T2T^2 test procedure).

  • F.crit: Critical FF value (Tsong's procedure).

  • F.crit.Hoffelder: Critical FF value (T2T^2 test procedure).

  • p.F: The pp value for the Hotelling's T2T^2 test statistic.

  • p.F.Hoffelder: The pp value for the Hotelling's T2T^2

    statistic based on the non-central FF distribution.

  • MTAD: Specified maximum tolerable average difference (MTAD) of the profiles of two formulations at each individual time point (in %).

  • Sim.Limit: Critical Mahalanobis distance or similarity limit (Tsong's procedure).

  • Obs.L: Observed lower limit (Tsong's procedure).

  • Obs.U: Observed upper limit (Tsong's procedure).

The NR.CI element contains the following information: - CI: A matrix of the points on the CR\textit{CR} bounds for each time point.

  • converged: A logical that indicates whether the NR algorithm converged or not.

  • points.on.crb: A logical that indicates whether the points that were found by the NR algorithm sit on the confidence region boundary or not, i.e. whether the T2T^2 statistic of the found data points, in relation to the mean difference, is equal to the critical FF value.

  • n.trial: Number of trials until convergence.

  • max.trial: Maximal number of trials.

  • Warning: A warning message, if applicable, or otherwise NULL.

  • Error: An error message, if applicable, or otherwise NULL.

Details

The function mimcr() assesses the equivalence of highly variable dissolution profiles by aid of a Model-Independent Multivariate Confidence Region (MIMCR) procedure as proposed by Tsong et al. (1996) and by aid of a T2 test for equivalence as proposed by Hoffelder (2016).

For details see the sections Comparison of highly variable dissolution profiles , Similarity limits in terms of MSD and T2 test for equivalence below.

Comparison of highly variable dissolution profiles

When comparing the dissolution data of a post-approval change product and a reference approval product, the goal is to assess the similarity between the mean dissolution values at the observed sample time points. A widely used method is the f2f_2 method that was introduced by Moore & Flanner (1996). Similarity testing criteria based on f2f_2 can be found in several FDA guidelines and in the guideline of the European Medicines Agency (EMA) On the investigation of bioequivalence (EMA 2010).

In situations where within-batch variation is greater than 15%, FDA guidelines recommend use of a multivariate confidence interval as an alternative to the f2f_2 method. This can be done using the following stepwise procedure:

  1. Establish a similarity limit in terms of Multivariate Statistical Distance (MSD) based on inter-batch differences in % drug release from reference (standard approved) formulations, i.e. the so-called Equivalence Margin (EM).
  2. Calculate the MSD between test and reference mean dissolutions.
  3. Estimate the 90% confidence interval (CI) of the true MSD as determined in step 2.
  4. Compare the upper limit of the 90% CI with the similarity limit determined in step 1. The test formulation is declared to be similar to the reference formulation if the upper limit of the 90% CI is less than or equal to the similarity limit.

Similarity limits in terms of MSD

For the calculation of the Multivariate Statistical Distance (MSD), the procedure proposed by Tsong et al. (1996) can be considered as well-accepted method that is actually recommended by the FDA. According to this method, a multivariate statistical distance, called Mahalanobis distance, is used to measure the difference between two multivariate means. This distance measure is calculated as

DM=(xTxR)Spooled1(xTxR), D_M = \sqrt{ \left( \bm{x}_T - \bm{x}_R \right)^{\top}\bm{S}_{pooled}^{-1} \left( \bm{x}_T - \bm{x}_R \right)} ,%D_M = sqrt((x_T - x_R)^{\top} S_{pooled}^{-1} (x_T - x_R)) ,

where Spooled\bm{S}_{pooled} is the sample variance-covariance matrix pooled across the comparative groups, xTx_T and xRx_R

are the vectors of the sample means for the test (TT) and reference (RR) profiles, and STS_T and xRx_R are the variance-covariance matrices of the test and reference profiles. The pooled variance-covariance matrix SpooledS_{pooled} is calculated by

\bm{S}_{pooled} = \frac{(n_R - 1) \bm{S}_R + (n_T - 1) \bm{S}_T}{%n_R + n_T - 2} .S_{pooled} = ((n_R - 1) S_R + (n_T - 1) S_T) /(n_R + n_T - 2) .

In order to determine the similarity limits in terms of the MSD, i.e. the Mahalanobis distance between the two multivariate means of the dissolution profiles of the formulations to be compared, Tsong et al. (1996) proposed using the equation

DMmax=dgSpooled1dg, D_M^{max} = \sqrt{ \bm{d}_g^{\top} \bm{S}_{pooled}^{-1} \bm{d}_g} ,%D_M^{max} = sqrt(d_g^{\top} S_{pooled}^{-1} d_g) ,

where dgd_g is a 1xp1 x p vector with all pp elements equal to an empirically defined limit dgd_g, e.g., 1515%, for the maximum tolerable difference at all time points, and pp is the number of sampling points. By assuming that the data follow a multivariate normal distribution, the 90% confidence region (CR\textit{CR}) bounds for the true difference between the mean vectors, μTμR\mu_T - \mu_R, can be computed for the resultant vector μ\mu to satisfy the following condition:

CR=K(μ(xTxR))Spooled1(μ(xTxR))\leqFp,nT+nRp1,0.9, \bm{\textit{CR}} = K \left( \bm{\mu} - \left( \bm{x}_T -\bm{x}_R \right) \right)^{\top} \bm{S}_{pooled}^{-1} \left( \bm{\mu} -\left( \bm{x}_T - \bm{x}_R \right) \right) \leqF_{p, n_T + n_R - p - 1, 0.9} ,%CR = sqrt((\mu - (x_T - x_R))^{\top} S_{pooled}^{-1} (\mu - (x_T - x_R)))\leq F_{p, n_T + n_R - p - 1, 0.9} ,

where KK is the scaling factor that is calculated as

K=nTnRnT+nR  nT+nRp1(nT+nR2)p, K = \frac{n_T n_R}{n_T + n_R} \; \frac{n_T + n_R - p - 1}{\left( n_T + n_R - 2 \right) p} ,%(n_T n_R) / (n_T + n_R) (n_T + n_R - p - 1) / ((n_T + n_R - 2) p) ,

and Fp,nT+nRp1,0.9F_{p, n_T + n_R - p - 1, 0.9} is the 90th90^{th} percentile of the FF distribution with degrees of freedom pp and nT+nRp1n_T + n_R - p - 1, where nTn_T and nRn_R are the number of observations of the reference and the test group, respectively, and pp

is the number of sampling or time points, as mentioned already. It is obvious that (nT+nR)(n_T + n_R) must be greater than (p+1)(p + 1). The formula for CR\textit{CR} gives a pp-variate 90% confidence region for the possible true differences.

T2 test for equivalence

Based on the distance measure for profile comparison that was suggested by Tsong et al. (1996), i.e. the Mahalanobis distance, Hoffelder (2016) proposed a statistical equivalence procedure for that distance, the so-called T2T^2 test for equivalence (T2EQ). It is used to demonstrate that the Mahalanobis distance between reference and test group dissolution profiles is smaller than the Equivalence Margin (EM). Decision in favour of equivalence is taken if the pp value of this test statistic is smaller than the pre-specified significance level α\alpha, i.e. if p<αp < \alpha. The pp value is calculated by aid of the formula

p=Fp,nT+nRp1,ncp,α  nT+nRp1(nT+nR2)pT2, p = F_{p, n_T + n_R - p - 1, ncp, \alpha} \;\frac{n_T + n_R - p - 1}{(n_T + n_R - 2) p} T^2 ,%p = F_{p, n_T + n_R - p - 1, ncp, \alpha}(n_T + n_R - p - 1) / ((n_T + n_R - 2) p) \; T^2 ,

where α\alpha is the significance level and ncpncp is the so-called non-centrality parameter that is calculated by

nTnRnT+nR(DMmax)2. \frac{n_T n_R}{n_T + n_R} \left( D_M^{max} \right)^2 .%(n_T n_R) / (n_T + n_R) (D_M^{max})^2 .

The test statistic being used is Hotelling's two-sample T2T^2 test that is given as

T2=nTnRnT+nR(xTxR)Spooled1(xTxR). T^2 = \frac{n_T n_R}{n_T + n_R} \left( \bm{x}_T - \bm{x}_R\right)^{\top} \bm{S}_{pooled}^{-1} \left( \bm{x}_T - \bm{x}_R \right) .%(n_T n_R) / (n_T + n_R) (x_T - x_R)^{\top} S_{pooled}^{-1} (x_T - x_R) .

As mentioned in paragraph Similarity limits in terms of MSD , dgd_g is a 1xp1 x p vector with all pp

elements equal to an empirically defined limit dgd_g. Thus, the components of the vector dgd_g can be interpreted as upper bound for a kind of average allowed difference between test and reference profiles, the global similarity limit . Since the EMA requires that similarity acceptance limits should be pre-defined and justified andnot be greater than a 10% difference , it is recommended to use 10%, not 15% as proposed by Tsong et al. (1996), for the maximum tolerable difference at all time points.

Examples

# Using the defaults, only profile time points with an average release of >= 1% # and only one time point with an average release of > 85% are taken into # account. res1 <- mimcr(data = dip3, tcol = 4:6, grouping = "batch") res1$Similarity res1$Parameters # Expected results in res1$Similarity # Tsong Hoffelder # "Similar" "Similar" # Expected results in res1$Parameters # DM df1 df2 alpha # 2.384023e-01 3.000000e+00 2.000000e+01 5.000000e-02 # K k T2 F # 1.818182e+00 6.000000e+00 3.410141e-01 1.033376e-01 # ncp.Hoffelder F.crit F.crit.Hoffelder p.F # 3.032296e+01 3.098391e+00 4.899274e+00 9.571526e-01 # p.F.Hoffelder MTAD Sim.Limit Obs.L # 2.890827e-08 1.000000e+01 2.248072e+00 1.067015e+00 # Obs.U # 1.543820e+00 # Comparison with T2-test for equivalence for dissolution data from the 'T2EQ' # package ## Not run: if (requireNamespace("T2EQ")) { library(T2EQ) data(ex_data_JoBS) T2EQ.dissolution.profiles.hoffelder( X = as.matrix(dip3[dip3$type == "ref", c("x.15", "x.20", "x.25")]), Y = as.matrix(dip3[dip3$type == "test", c("x.15", "x.20", "x.25")])) } # Excerpt of output: # Hotelling's T2: 0.3410141 # Noncentrality parameter: 30.32296 # Significance level: 0.05 # Teststatistic: 0.1033376 # Quantile of noncent. F-distribution: 4.899274 # p-value of the T2-test for equivalence: p = 2.890827e-08 ## End(Not run) # Use of 'bounds = c(1, 85)' res2 <- mimcr(data = dip1, tcol = 3:10, grouping = "type", bounds = c(1, 85), nsf = c(1, 2)) res2$Similarity res2$Profile.TP res2[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")] # Expected results in res2$Similarity # Tsong Hoffelder # "Dissimilar" "Dissimilar" # Expected results in res2$Profile.TP # t.5 t.10 t.15 t.20 t.30 t.60 t.90 # 5 10 15 20 30 60 90 # Expected results in res2$Parameters # res2[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")] # p.F.Hoffelder Sim.Limit Obs.U # 0.740219 11.328041 31.679020 # Allow for a larger maximum tolerable average difference (MTAD), e.g., 15. res3 <- mimcr(data = dip1, tcol = 3:10, grouping = "type", mtad = 15, bounds = c(1, 85), nsf = c(1, 2)) res3$Similarity res3[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")] # Expected results in res3$Similarity # Tsong Hoffelder # "Dissimilar" "Dissimilar" # Expected results in res3$Parameters # res3[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")] # p.F.Hoffelder Sim.Limit Obs.U # 0.3559019 16.9920622 31.6790198 # Use default 'mtad' but set 'signif = 0.1' and use 'bounds = c(1, 95)' so that # the complete profiles are taken into account. res4 <- mimcr(data = dip1, tcol = 3:10, grouping = "type", mtad = 10, signif = 0.1, bounds = c(1, 95), nsf = c(1, 2)) res4$Similarity res4$Profile.TP res4[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")] # Expected results in res4$Similarity # Tsong Hoffelder # "Dissimilar" "Dissimilar" # Expected results in res4$Profile.TP # t.5 t.10 t.15 t.20 t.30 t.60 t.90 t.120 # 5 10 15 20 30 60 90 120 # Expected results in res4$Parameters # res2[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")] # p.F.Hoffelder Sim.Limit Obs.U # 0.1449045 19.4271898 33.3180044 ## Not run: # If 'max_trial' is too small, the Newton-Raphson search may not converge. tryCatch( mimcr(data = dip1, tcol = 3:10, grouping = "type", max_trial = 5), warning = function(w) message(w), finally = message("\nMaybe increasing the number of max_trial could help.")) # If 'tol' is too big, the points found by the Newton-Raphson search may not # be located on the confidence region boundary. tryCatch( mimcr(data = dip3, tcol = 4:6, grouping = "batch", tol = 1), warning = function(w) message(w), finally = message("\nMaybe making tol smaller could help.")) # Passing in a data frame with a grouping variable with a number of levels # that differs from two produces an error. tmp <- rbind(dip1, data.frame(type = "T2", tablet = as.factor(1:6), dip1[7:12, 3:10])) tryCatch( mimcr(data = tmp, tcol = 3:10, grouping = "type", bounds = c(1, 85)), error = function(e) message(e), finally = message("\nMaybe you want to remove unesed levels in data.")) # Error in mimcr(data = tmp, tcol = 3:10, grouping = "type", bounds = , : # The number of levels in column type differs from 2. ## End(Not run)

References

United States Food and Drug Administration (FDA). Guidance for industry: dissolution testing of immediate release solid oral dosage forms. 1997.

https://www.fda.gov/media/70936/download

United States Food and Drug Administration (FDA). Guidance for industry: immediate release solid oral dosage form: scale-up and post-approval changes, chemistry, manufacturing and controls, in vitro dissolution testing, and in vivo bioequivalence documentation (SUPAC-IR). 1995.

https://www.fda.gov/media/70949/download

European Medicines Agency (EMA), Committee for Medicinal Products for Human Use (CHMP). Guideline on the Investigation of Bioequivalence. 2010; c("\n", "CPMP/EWP/QWP/1401/98 Rev. 1").

Tsong, Y., Hammerstrom, T., Sathe, P.M., and Shah, V.P. Statistical assessment of mean differences between two dissolution data sets. Drug Inf J. 1996; 30 : 1105-1112.

tools:::Rd_expr_doi("10.1177/009286159603000427")

Tsong, Y., Hammerstrom, T., and Chen, J.J. Multipoint dissolution specification and acceptance sampling rule based on profile modeling and principal component analysis. J Biopharm Stat. 1997; 7 (3): 423-439.

tools:::Rd_expr_doi("10.1080/10543409708835198")

Wellek S. (2010) Testing statistical hypotheses of equivalence and noninferiority (2nd ed.). Chapman & Hall/CRC, Boca Raton.

tools:::Rd_expr_doi("10.1201/EBK1439808184")

Hoffelder, T. Highly variable dissolution profiles. Comparison of T2T^2-test for equivalence and f2f_2 based methods. Pharm Ind. 2016; 78 (4): 587-592.

https://www.ecv.de/suse_item.php?suseId=Z|pi|8430

See Also

gep_by_nera, get_T2_two, get_T2_one, bootstrap_f2, mztia.

  • Maintainer: Pius Dahinden
  • License: GPL (>= 2)
  • Last published: 2025-03-24