f2: Similarity factor f2 for dissolution data

Description Usage Arguments Details Value References See Also Examples

View source: R/statistics.R

Description

The function f2() calculates the similarity factor f_2.

Usage

1
f2(data, tcol, grouping, use_EMA = "yes", bounds = c(1, 85))

Arguments

data

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

tcol

A vector of indices specifying the columns in data that contain the % release values. The length of tcol must be three or longer.

grouping

A character string specifying 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).

use_EMA

A character string indicating if the similarity factor f_2 should be calculated following the EMA guideline “On the investigation of bioequivalence” ("yes", the default) or not ("no"). A third option is "ignore". If use_EMA is "yes" or "no" the appropriate profile portion is determined on the basis of the values of the parameter bounds. If it is "ignore", the complete profiles are used as specified by the parameter tcol.

bounds

A numeric vector of the form c(lower, upper) specifying the “lower” and “upper” limits, respectively, for the % drug release given that use_EMA is "no". 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. If use_EMA is "yes" the bounds are c(1, 85) per definition.

Details

Similarity of dissolution profiles is assessed using the similarity factor f_2 according to the EMA guideline (European Medicines Agency 2010) “On the investigation of bioequivalence”. The evaluation of the similarity factor is based on the following constraints:

  1. A minimum of three time points (zero excluded).

  2. The time points should be the same for the two formulations.

  3. Twelve individual values for every time point for each formulation.

  4. Not more than one mean value of > 85% dissolved for any of the formulations.

  5. The relative standard deviation or coefficient of variation of any product should be less than 20% for the first time point and less than 10% from the second to the last time point.

The similarity factor f_2 is calculated by aid of the equation

f_2 = 50 log(100 / (sqrt(1 + (sum((R.bar(t) - T.bar(t))^2) / n)))) .

In this equation

f_2

is the similarity factor,

n

is the number of time points,

R.bar(t)

is the mean percent reference drug dissolved at time t after initiation of the study, and

T.bar(t)

is the mean percent test drug dissolved at time t after initiation of the study.

Dissolution profiles are regarded as similar if the f_2 value is between 50 and 100.

Value

A list with the following elements is returned:

f2

A numeric value representing the similarity factor f_2.

Profile.TP

A named numeric vector of the columns in data specified by tcol and depending on the selection of use_EMA. Given that the column names contain extractable numeric information, e.g., specifying the testing time points of the dissolution profile, it contains the corresponding values. Elements where no numeric information could be extracted are NA.

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

See Also

f1.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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 defaults, i.e. 'use_EMA = "yes"', 'bounds = c(1, 85)'
# Comparison always involves only two groups.
f2(data = dip1, tcol = 3:10, grouping = "type")

# $f2
# [1] 40.83405
#
# $Profile.TP
# t.5 t.10 t.15 t.20 t.30 t.60 t.90
#   5   10   15   20   30   60   90

# Use of 'use_EMA = "no"', 'bounds = c(5, 80)'
f2(data = dip1, tcol = 3:10, grouping = "type", use_EMA = "no",
   bounds = c(5, 80))

# $f2
# [1] 39.24385
#
# $Profile.TP
# t.5 t.10 t.15 t.20 t.30 t.60
#   5   10   15   20   30   60

# Use of 'use_EMA = "no"', 'bounds = c(1, 95)'
f2(data = dip1, tcol = 3:10, grouping = "type", use_EMA = "no",
   bounds = c(1, 95))

# $f2
# [1] 42.11197
#
# $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

# In this case, the whole profiles are used. The same result is obtained
# when setting 'use_EMA = "ignore"' (ignoring values passed to 'bounds').
f2(data = dip1, tcol = 3:10, grouping = "type", use_EMA = "ignore")

# 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(
  f2(data = tmp, tcol = 3:10, grouping = "type"),
  error = function(e) message(e),
  finally = message("\nMaybe you want to remove unesed levels in data."))

# Error in f1(data = tmp, tcol = 3:10, grouping = "type") :
#   The number of levels in column type differs from 2.

disprofas documentation built on Dec. 8, 2021, 5:10 p.m.