Darborn
☆    

Taiwan,
2025-10-17 07:40
(245 d 13:38 ago)

Posting: # 24464
Views: 4,043
 

 Comparing two plasma concentration profiles [Study As­sess­ment]

Hi everyone

I was reading the lecture slides presenting by Helmut in SAAMnow called "Data Manipulation in Bio­equi­va­lence". At the page 8, it said comparing plasma concentration profiles with f2 method. I tried with some profiles but got negative f2 values, so does the data need to be transformed or normalized? Anyone has ideas?

Thanks
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2025-10-17 14:51
(245 d 06:26 ago)

@ Darborn
Posting: # 24465
Views: 3,690
 

 Comparing two plasma concentration profiles

Hi Darbon,

❝ I was reading the lecture slides presenting by Helmut in SAAMnow called "Data Manipulation in Bio­equi­va­lence". At the page 8, it said comparing plasma concentration profiles with f2 method. I tried with some profiles but got negative f2 values, …

That’s strange. Are you comparing concentrations at the same nominal time points? I can’t imagine your results from the formula $$f_2=50\,\log_{10}\left\{100\,\sqrt{1+\frac{1}{n}\sum_{i=1}^{i=n}(\text{R}_i-\text{T}_i)^2}\right\}$$ because the differences are squared and thus, always be ≥ 0.
[image]Edit: This formula is wrong. See this post for the correct one.

❝ … so does the data need to be transformed or normalized? Anyone has ideas?

No. Sorry.
Perhaps ElMaestro will join the discussion. He developed much better methods.1,2


  1. Fuglsang A. Detection of data manipulation in bioequivalence trials. Eur J Pharm Sci. 2021; 156:105595. doi:10.1016/j.ejps.2020.105595.
  2. Fuglsang A, Dogra A, Sharma N. Evaluation of Incurred Subject Period Re‑analysis (ISPR) as a Tool to Distinguish Fraudulent Phar­ma­co­ki­ne­tic Profile Pairs from Non‑fraudulent Pairs. AAPS J. 2025; 27:15. doi:10.1208/s12248-024-01000-x

Dif-tor heh smusma 🖖🏼 Довге життя Україна! [image]
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Darborn
☆    

Taiwan,
2025-10-21 03:02
(241 d 18:15 ago)

@ Helmut
Posting: # 24468
Views: 3,404
 

 Comparing two plasma concentration profiles

Hi Helmut,

I may add some background information.
China's regulatory agency (NMPA/CDE) refused to approve multiple highly-variable products which conducted their bioequivalence study in a four-period crossover design. The reason for this acion was based on "The similarity of plasma-concentration curves of the same subject between TEST and REFERENCE is larger than the similarity between two repeated REFERENCE".
I tried to calculate the f2 factor using the Cmax value of the reference product as a correction factor, and I found many different products had a similar pattern that "The similarity of plasma-concentration curves of the same subject between TEST and REFERENCE is larger than the similarity between two repeated REFERENCE".
I believe this is due to the nature of highly-variable products and randomness, but I am not sure if this is correct. Does FDA or EMA have similar statments?

Thanks
ElMaestro
★★★

Denmark,
2025-10-21 14:39
(241 d 06:38 ago)

@ Darborn
Posting: # 24469
Views: 3,493
 

 Comparing two plasma concentration profiles

Hi Darborn,

❝ China's regulatory agency (NMPA/CDE) refused to approve multiple highly-variable products which conducted their bioequivalence study in a four-period crossover design. The reason for this acion was based on "The similarity of plasma-concentration curves of the same subject between TEST and REFERENCE is larger than the similarity between two repeated REFERENCE".

❝ I tried to calculate the f2 factor using the Cmax value of the reference product as a correction factor, and I found many different products had a similar pattern that "The similarity of plasma-concentration curves of the same subject between TEST and REFERENCE is larger than the similarity between two repeated REFERENCE".

❝ I believe this is due to the nature of highly-variable products and randomness, but I am not sure if this is correct. Does FDA or EMA have similar statments?


Sorry to hear this. It seems you are caught in a mess which may not be your fault.
On one hand, if you use a method which allows for profile dilution prior to duplication (such as method 101 in the paper referenced by Hötzi) then one might think that "T vs R" and "T vs T" and "R vs R" should give the same profile scores and same variability if the products are bioequivalent.
On the other hand, if you compare "T vs T" or "T vs R" it is not quite the same as "T vs R" as you have an additional factor (or source of variability) in that experiment, and that's of course the formulation.
Bt please elaborate on terminology: When you/they say similarity is larger, does that mean a larger score or "more similar" or both? In the papers referenced above similarity score gets smaller as profile pairs get more similar. Who knows what method they are using at the agency?! A method with the same property or a method with the opposite property, or something altogether not fitting into this paradigm?

Kindly give more info from your deficiency letter. Any little bit helps. I think there are some options, I am confident there must be unless the case is closed, but the devil will be in the details and we are still in the early days of similarity measurements.

Pass or fail!
ElMaestro
Shuanghe
★★  

Spain,
2025-10-29 17:27
(233 d 02:50 ago)

@ Helmut
Posting: # 24471
Views: 3,288
 

 Comparing two plasma concentration profiles

Hi Helmut,

❝ That’s strange. Are you comparing concentrations at the same nominal time points? I can’t imagine your results from the formula $$f_2=50\,\log_{10}\left\{100\,\sqrt{1+\frac{1}{n}\sum_{i=1}^{i=n}(\text{R}_i-\text{T}_i)^2}\right\}$$ because the differences are squared and thus, always be ≥ 0.


I just want to say that mathematically it is possible to have negative \(f_2\), though in the context of dissolution comparison you'll never see it. But Darbon was talking about concentration profile comparison, so with certain very different profiles, you could end up with negative \(f_2\).

I think there's a typo in the \(f_2\) formula in your post. 100 should be the numerator and square root is the denominator. When the average difference is more than 100%, you'll have domain value of log function less than 1, which leads to the negative results.

An example: if the average difference is 100%, then you'll have $$f_2=50\,\log_{10} \frac{100}{\sqrt{1+\frac{1}{n}\sum_{i=1}^{i=n}100^2}} = -0.001.$$ With average difference of 110%, \(f_2=-2.07\).

By the way, why single $ doesn't work for inline math?


Edit: MathJax corrected. [Helmut]

All the best,
Shuanghe
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2025-10-29 18:01
(233 d 02:16 ago)

@ Shuanghe
Posting: # 24472
Views: 3,266
 

 MathJax

Hi Shuanghe,

❝ By the way, why single $ doesn't work for inline math?

For an inline formula use \(...\). See this post for the syntax.
$...$ as limiter – like in R Markdown – is not allowed because it would screw up any text of a post containing $ or if used in R-code like foo$bar. I will edit your post.

I will check the formulas later.

Dif-tor heh smusma 🖖🏼 Довге життя Україна! [image]
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2025-10-30 11:28
(232 d 08:49 ago)

@ Shuanghe
Posting: # 24473
Views: 3,239
 

 Formulas…

Hi Shuanghe,

diving into the formulas. Ugly as shit in the ICH M9 guideline$$\text{f2}=50\phantom{.}\tiny{\bullet}\normalsize\phantom{.}\log\{\text{[}1+(1/\text{n}){\Sigma_{\text{t=1}}}^\text{n}(\text{R}_\text{t}-\text{T}_\text{t})^2\text{]}^{-0.5}\phantom{.}\tiny{\bullet}\normalsize\phantom{.}100\}\tag{1}$$ which we can beautify to your $$f_2=50\cdot\log_{10}\frac{100}{\sqrt{1+\frac{1}{n}\sum_{t=1}^{t=n}(\text{R}_t-\text{T}_t)^2}}\tag{2}$$ Thanks a lot! I screwed up in my post above because I had overlooked that the exponent of the term in square brackets of \((1)\) is \(0.5\) and not \(0.5\)… If we don’t trust algebra, we can compare the formulas by brute force.

f2 <- function(R, T, formula) {
  if (!length(R) == length(T))
    stop ("R and T vectors must have the same length.")
  if (missing(formula)) formula <- 2 # default
  if (!formula %in% 1:2)
    stop ("formula must be 1 or 2.")
  ms <- mean((R - T)^2) # instead of the clumsy formula
  if (formula == 1) {
    x <- 50 * log10((1 + ms)^-0.5 * 100)
  } else {
    x <- 50 * log10(100 / sqrt(1 + ms))
  }
  return(x)
}

n       <- 20
mu_R    <- mu_T    <- 100
sigma_R <- sigma_T <- 20
# is the package "truncnorm" installed?
inst    <- installed.packages()["truncnorm", "Package"]
if (length(inst) == 1) library(truncnorm)  # if yes, attach it
set.seed(123456)                           # for reproducibility
if (length(inst) == 1) { # truncated normal distribution
  R <- sort(rtruncnorm(n = n, a = 0, b = Inf,
                       mean = mu_R, sd = sigma_R))
  T <- sort(rtruncnorm(n = n, a = 0, b = Inf,
                       mean = mu_T, sd = sigma_T))
} else {                 # workaround to avoid negative values
  R <- sort(abs(rnorm(n = n, mean = mu_R, sd = sigma_R)))
  T <- sort(abs(rnorm(n = n, mean = mu_T, sd = sigma_T)))
}
f2_1 <- f2(R, T, 1)
f2_2 <- f2(R, T, 2)
cat(n, "sorted random values of R and T",
    "\nmean (R) =", sprintf("%8.3f", mean(R)),
    "range:", paste(signif(signif(range(R), 5)), collapse = " – "),
    "\nmean (T) =", sprintf("%8.3f", mean(T)),
    "range:", paste(signif(signif(range(T), 5)), collapse = " – "),
    "\n  f2 (1) =", sprintf("%.4g", f2_1),
    "\n  f2 (2) =", sprintf("%.4g", f2_2),
    "\nAre the results by the two formulas identical?",
    isTRUE(all.equal(f2_1, f2_2)), "\n")

20 sorted random values of R and T
mean (R) =  110.477 range: 77.721 – 150.05
mean (T) =   97.769 range: 45.023 – 131.2
  f2 (1) = 42.37
  f2 (2) = 42.37
Are the results by the two formulas identical? TRUE


Try very different values:

mu_R    <- 100
sigma_R <- 20
mu_T    <- 10
sigma_T <- 2
...
20 sorted random values of R and T
mean (R) =  110.477 range: 77.721 – 150.05
mean (T) =    9.777 range: 4.5023 – 13.12
  f2 (1) = -0.4946
  f2 (2) = -0.4946
Are the results by the two formulas identical? TRUE

Bingo, negative \(\small{f_2}\)!

❝ An example: if the average difference is 100%, then you'll have $$f_2=50\,\log_{10} \frac{100}{\sqrt{1+\frac{1}{n}\sum_{i=1}^{i=n}100^2}} = -0.001.$$

❝ With average difference of 110%, \(f_2=-2.07\).


IMHO, if you have the average difference, you should not square it. You need the average of squared difference. Then:

f2_ms <- function(ms) {
  if (ms < 0) stop ("ms must not be negative.")
  50 * log10(100 / sqrt(1 + ms))
}
ms <- c(0, 99, 100, 110, 99^2, 100^2, 110^2)
for (j in seq_along(ms)) {
  cat(sprintf("Mean sq. diff. = %5.0f, f2 = %+8.3f\n",
              ms[j], f2_ms(ms[j])))
}

Mean sq. diff. =     0, f2 = +100.000
Mean sq. diff. =    99, f2 =  +50.000
Mean sq. diff. =   100, f2 =  +49.892
Mean sq. diff. =   110, f2 =  +48.867
Mean sq. diff. =  9801, f2 =   +0.217
Mean sq. diff. = 10000, f2 =   -0.001
Mean sq. diff. = 12100, f2 =   -2.071


Of course, I can be wrong. Given all that, I think that \(\small{f_2}\) is not useful for comparing (plasma) concentration profiles.

Dif-tor heh smusma 🖖🏼 Довге життя Україна! [image]
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Shuanghe
★★  

Spain,
2025-11-05 15:24
(226 d 04:53 ago)

@ Helmut
Posting: # 24479
Views: 2,814
 

 Formulas…

Hi Helmut,

❝ diving into the formulas. Ugly as shit in the ICH M9 guideline$$\text{f2}=50\phantom{.}\tiny{\bullet}\normalsize\phantom{.}\log\{\text{[}1+(1/\text{n}){\Sigma_{\text{t=1}}}^\text{n}(\text{R}_\text{t}-\text{T}_\text{t})^2\text{]}^{-0.5}\phantom{.}\tiny{\bullet}\normalsize\phantom{.}100\}\tag{1}$$

This reminds me the formular in FDA's 1995 guidance of SUPAC for IR formulation where the f2 formula appeared the very first time in the regulatory guideline. Ugly indeed.:-D

❝ IMHO, if you have the average difference, you should not square it. You need the average of squared difference.

You're right. My excuse is that I posted it right before I went to Switzerland for 3-day weekend (!) so I wasn't really in the thinking mode ;-)

All the best,
Shuanghe
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2025-10-30 16:40
(232 d 03:38 ago)

@ Darborn
Posting: # 24474
Views: 3,093
 

 Negative ƒ2 is possible

Hi Darborn,

❝ I was reading the lecture slides presenting by Helmut in SAAMnow called "Data Manipulation in Bio­equi­va­lence". At the page 8, it said comparing plasma concentration profiles with f2 method. I tried with some profiles but got negative f2 values, so does the data need to be transformed or normalized? Anyone has ideas?

I checked my R-code used for the presentation. I implemented the formula of the ICH M9 guideline, i.e., \((1)\) of this post. With real data I got occasionally \(\small{f_2<0}\) like you. However, in some of the data sets all (‼) \(\small{f_2}\)-values were \(\small{<0}\). My code contains a confused comment. I couldn’t understand the reason behind, since this never happens in dissolution comparisons. Therefore I used \(\small{|f_2|}\) as a workaround.
Not the slightest idea whether this makes any sense at all. :confused:

Dif-tor heh smusma 🖖🏼 Довге життя Україна! [image]
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
ElMaestro
★★★

Denmark,
2025-11-03 15:15
(228 d 05:02 ago)

@ Helmut
Posting: # 24475
Views: 2,868
 

 Interesting, however...

Hi all,


f2 has been tested vigorously and rigorously with fraudulent datasets, by ... well ... someone.
We can rather easily anchor it to some convenient value like zero for a perfect match and so on. No issues there. But even so, the experiments with f2 have been troubled by the fact that it does not separate duplicates from non-duplicates very well. So empirically speaking, it has been a kind of dead end.
However, that can be improved if we introduce weighting and give higher weights to higher concentrations just as with methods 101, 36, 205 etc.
Even so, a plain f2 derivative does not capture dilutions. So, if profiles are diluted before re-analysis then f2 can be a painful acquaintance. Moreover, the need to validate not just precision but also accuracy when developing methods is relevant: Even with un-diluted re-analysis the re-analysed profiles are occasionally displaced vertically. Stating it differently: We get dilution estimates a little bit different from 1 with methods that allow that, and that phenomon renders methods that do not allow dilution kind of useless. At least, so says the guy who has been looking a bit into it. He is a bit of a weirdo, though. I heard he is currently in Ahmedabad with trips to Surat, Mumbai, Goa and Hyderabad coming up.
Getting something useful from that guy might take a while. :sleeping:

Pass or fail!
ElMaestro
Darborn
☆    

Taiwan,
2025-11-07 07:04
(224 d 13:14 ago)

@ Helmut
Posting: # 24480
Views: 2,767
 

 Negative ƒ2 is possible

Hi Helmut,


I eventually tried a normalization method that dividing all concentration data by the average Cmax of the reference product. This gives me, in nearly all cases, positive f2 values. This is similar to the method described in this article, althogh I used the whole curve instead of the absorption phase.
UA Flag
Activity
 Admin contact
23,654 posts in 4,992 threads, 1,570 registered users;
133 visitors (0 registered, 133 guests [including 15 identified bots]).
Forum time: 21:18 CEST (Europe/Vienna)

Actually, science starts to become interesting
only where it ends.    Justus von Liebig

The Bioequivalence and Bioavailability Forum is hosted by
BEBAC Ing. Helmut Schütz
HTML5