mimcr {disprofas} | R Documentation |
Model-independent multivariate confidence region (MIMCR) procedure
Description
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).
Usage
mimcr(
data,
tcol,
grouping,
fit_n_obs = FALSE,
mtad = 10,
signif = 0.05,
max_trial = 50,
bounds = c(1, 85),
tol = 1e-09
)
Arguments
data |
A data frame with the dissolution profile data in wide format. |
tcol |
A vector of indices specifying the columns in |
grouping |
A character string specifying the column in |
fit_n_obs |
A logical value specifying if the number of rows per level
in the column specified by the |
mtad |
A numeric value specifying the “maximum tolerable average
difference” (MTAD) of the profiles of two formulations at all time points
(in %). The default value is |
signif |
A positive numeric value between |
max_trial |
A positive integer specifying the maximum number of Newton-Raphson search rounds to be performed. |
bounds |
A numeric vector of the form |
tol |
A non-negative numeric specifying the accepted minimal difference between two consecutive search rounds. |
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.
Value
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 |
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 |
k |
Scaling factor for the squared Mahalanobis distance to obtain
the |
T2 |
Hotelling's |
F |
Observed |
ncp.Hoffelder |
Non-centrality parameter for calculation of the |
F.crit |
Critical |
F.crit.Hoffelder |
Critical |
p.F |
The |
p.F.Hoffelder |
The |
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 |
converged |
A logical specifying if the NR algorithm converged or not. |
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. |
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 f_2
method that was introduced by Moore & Flanner (1996).
Similarity testing criteria based on f_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 f_2
method. This can be done using the following
stepwise procedure:
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).
Calculate the MSD between test and reference mean dissolutions.
Estimate the 90% confidence interval (CI) of the true MSD as determined in step 2.
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
D_M = \sqrt{ \left( \bm{x_T} - \bm{x_R} \right)^{\top}
\bm{S}_{pooled}^{-1} \left( \bm{x_T} - \bm{x_R} \right)} ,
where \bm{S}_{pooled} = \frac{\left( \bm{S}_T + \bm{S}_R \right)}{2}
is the sample variance-covariance matrix
pooled across the batches, \bm{x}_T
and \bm{x}_R
are
the vectors of the sample means for the test (T
) and reference
(R
) profiles, and \bm{S}_T
and \bm{S}_R
are the
variance-covariance matrices of the test and reference profiles.
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
D_M^{max} = \sqrt{ \bm{d}_g^{\top} \bm{S}_{pooled}^{-1} \bm{d}_g} ,
where \bm{d}_g
is a 1 \times p
vector with all
p
elements equal to an empirically defined limit \bm{d}_g
,
e.g., 15
%, for the maximum tolerable difference at all time points,
and p
is the number of sampling points. By assuming that the data
follow a multivariate normal distribution, the 90% confidence region
(CR
) bounds for the true difference between the mean vectors,
\bm{\mu}_T - \bm{\mu}_R
, can be computed for the
resultant vector \bm{\mu}
to satisfy the following condition:
\bm{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) \leq F_{p, n_T + n_R - p - 1, 0.9} ,
where K
is the scaling factor that is calculated as
K = \frac{n_T n_R}{n_T + n_R} \cdot \frac{n_T + n_R - p - 1}{
\left( n_T + n_R - 2 \right) \cdot p} ,
and F_{p, n_T + n_R - p - 1, 0.9}
is the 90^{th}
percentile of
the F
distribution with degrees of freedom p
and
n_T + n_R - p - 1
. It is obvious that (n_T + n_R)
must be greater
than (p + 1)
. The formula for CR
gives a p
-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
T^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 p
value of this test statistic is smaller
than the pre-specified significance level \alpha
, i.e. if
p < \alpha
. The p
value is calculated by aid of the formula
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 ,
where \alpha
is the significance level and ncp
is the so-called
“non-centrality parameter” that is calculated by
\frac{n_T n_R}{n_T + n_R} \left( D_M^{max} \right)^2 .
The test statistic being used is Hotelling's T^2
that is given as
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) .
As mentioned elsewhere, \bm{d}_g
is a 1 \times p
vector with all p
elements equal to an empirically defined limit
d_g
. Thus, the components of the vector \bm{d}_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 and not 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.
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;
CPMP/EWP/QWP/1401/98 Rev. 1.
https://www.ema.europa.eu/en/documents/scientific-guideline/guideline-investigation-bioequivalence-rev1_en.pdf
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.
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.
doi: 10.1080/10543409708835198
Wellek S. (2010) Testing statistical hypotheses of equivalence and
noninferiority (2nd ed.). Chapman & Hall/CRC, Boca Raton.
doi: 10.1201/EBK1439808184
Hoffelder, T. Highly variable dissolution profiles. Comparison of
T^2
-test for equivalence and f_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
, bootstrap_f2
,
mztia
.
Examples
# Dissolution data of one reference batch and one test batch of n = 12
# capsules each:
str(dip3)
# 'data.frame': 24 obs. of 6 variables:
# $ cap : Factor w/ 12 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ batch: Factor w/ 2 levels "blue","white": 2 2 2 2 2 2 2 2 2 2 ...
# $ type : Factor w/ 2 levels "ref","test": 1 1 1 1 1 1 1 1 1 1 ...
# $ x.15 : num 49 15 56 57 6 62 23 11 9 42 ...
# $ x.20 : num 86 59 84 87 58 90 71 64 61 81 ...
# $ x.25 : num 98 96 96 99 90 97 97 92 88 96 ...
# 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:
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
# Dissolution data of one reference batch and one test batch of n = 6
# tablets each:
str(dip1)
# 'data.frame': 12 obs. of 10 variables:
# $ type : Factor w/ 2 levels "R","T": 1 1 1 1 1 1 2 2 2 2 ...
# $ tablet: Factor w/ 6 levels "1","2","3","4",..: 1 2 3 4 5 6 1 2 3 4 ...
# $ t.5 : num 42.1 44.2 45.6 48.5 50.5 ...
# $ t.10 : num 59.9 60.2 55.8 60.4 61.8 ...
# $ t.15 : num 65.6 67.2 65.6 66.5 69.1 ...
# $ t.20 : num 71.8 70.8 70.5 73.1 72.8 ...
# $ t.30 : num 77.8 76.1 76.9 78.5 79 ...
# $ t.60 : num 85.7 83.3 83.9 85 86.9 ...
# $ t.90 : num 93.1 88 86.8 88 89.7 ...
# $ t.120 : num 94.2 89.6 90.1 93.4 90.8 ...
# Use of 'bounds = c(1, 85)'
res2 <- mimcr(data = dip1, tcol = 3:10, grouping = "type", bounds = c(1, 85))
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"]][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))
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"]][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))
res4$Similarity
res4$Profile.TP
res4[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")]
# Expected results in res3$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 t.120
# 5 10 15 20 30 60 90 120
# Expected results in
# res2[["Parameters"]][c("p.F.Hoffelder", "Sim.Limit", "Obs.U")]
# p.F.Hoffelder Sim.Limit Obs.U
# 0.1449045 19.4271898 33.3180044
# 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.