Ohlbe
★★★

France,
2021-09-16 23:41
(31 d 03:18 ago)

Posting: # 22575
Views: 1,015
 

 Another two... [GxP / QC / QA]

Dear all,

It looks like the FDA has just keelhauled 2 CROs again: Panexcell and Synchron Research. The FDA will reject all data from both CROs due to data manipulation. All Panexcell data had already been rejected in the EU.

The FDA letters are very explicit regarding what they have found, and their conclusion is crystal clear:

Put simply, because you have been responsible for the creation of false data in the studies discussed here, we have no reason to believe that any data that you have produced are reliable. Thus, FDA has determined that all study data from all studies conducted at your firm must be rejected.

Regards
Ohlbe
ElMaestro
★★★

Denmark,
2021-09-17 08:42
(30 d 18:17 ago)

@ Ohlbe
Posting: # 22576
Views: 931
 

 Another two...

Yikes Ohlbe,

» It looks like the FDA has just keelhauled 2 CROs again: Panexcell and Synchron Research. The FDA will reject all data from both CROs due to data manipulation. All Panexcell data had already been rejected in the EU.
»
» The FDA letters are very explicit regarding what they have found, and their conclusion is crystal clear:
»
» Put simply, because you have been responsible for the creation of false data in the studies discussed here, we have no reason to believe that any data that you have produced are reliable. Thus, FDA has determined that all study data from all studies conducted at your firm must be rejected.

thanks for posting the info. These stories justify the existence of the SatoWIB and Buster software that's used to detect exactly the type of manipulation that FDA are worried about. FDA sends a remarkably clear message there.

One good question is what happens now. I would not be surprised if PanExcell and Synchron will cease to exist (might pop up under another name?), sponsors using the two CROs will be forced to abandon some/all of their MA's and/or repeat studies even for EU and WHO, and regulators will more seriously start to consider how statistical (or pharmacokinetic) software screening for indicators of manipulation in their own right should be used routinely within agencies. There may be a little wars going on between assessors and inspectors all the while. E.g. whose job is it to screen and who takes decisions on the basis of the outcome? But Rome wasn't built in a day :-D :-D

Bonus question:

Have a look at the pdf files from FDA. Now answer this question: Which day were the letters issued?

Not written in the file? Well, then how about the meta-info embedded in the pd file? Oh, a date is not there either? Well, then... Do we really need to go looking for the date on the linking FDA page?
It is funny how, in this day and age when ALCOA and so forth is so fashionable, letters like these are not explicitly dated. Is there a reason?


Edit: 2 successive posts merged [Ohlbe]

Pass or fail!
ElMaestro
Ohlbe
★★★

France,
2021-09-17 10:15
(30 d 16:44 ago)

@ ElMaestro
Posting: # 22579
Views: 887
 

 Dates

Dear ElMaestro,

» Have a look at the pdf files from FDA. Now answer this question: Which day were the letters issued?

Well, the only place where you can find a date is the name of the PDF file, which for both letters includes "9.15.21". If you were to tell an FDA inspector this is how you date your documents, you would get his autograph on a '483.

By the way, I forgot. Look at the date of the inspection on Synchron's letter. Now look at this announcement on their web site :-D

Regards
Ohlbe
Ohlbe
★★★

France,
2021-09-17 20:28
(30 d 06:31 ago)

@ ElMaestro
Posting: # 22587
Views: 831
 

 Some more info

Hi ElMaestro,

» One good question is what happens now. I would not be surprised if PanExcell and Synchron will cease to exist (might pop up under another name?), sponsors using the two CROs will be forced to abandon some/all of their MA's and/or repeat studies

Yes, indeed, in the USA: instructions to companies have now been posted on the FDA web site. Repeat all studies; therapeutic equivalence of already approved products is meanwhile changed to BX. Europe: it should not take them more than a year or two to decide what to do :sleeping:

» Have a look at the pdf files from FDA. Now answer this question: Which day were the letters issued?

» Do we really need to go looking for the date on the linking FDA page?

According to this new page: the letters were sent out on 15 September 2021.

Regards
Ohlbe
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2021-09-17 16:50
(30 d 10:09 ago)

@ Ohlbe
Posting: # 22583
Views: 866
 

 Cheating

Hi Ohlbe,

successful cheating is not for lay persons… [image]-script at the end.
The CVs calculated from the confidence intervals in both ‘parts’ are much lower than the ones in the ‘full’ study. Or the other way ’round: If we pool the CVs of the ‘parts’ we could expect values which are lower than the ‘observed’ (tee-hee!) ones.

       CRO  study  n metric     PE  lower  upper   BE    CV CV.pooled
 Panexcell part 1 12   Cmax  71.26  64.78  78.38 fail 12.93         
 Panexcell part 2 12   Cmax 141.80 124.27 161.82 fail 17.98         
 Panexcell   full 24   Cmax 100.52  86.88 116.31 pass
30.08     15.25
 Panexcell part 1 12 AUC0-t  85.41  78.45  93.00 fail 11.53         
 Panexcell part 2 12 AUC0-t 126.89 115.81 139.04 fail 12.40         
 Panexcell   full 24 AUC0-t 104.11  94.97 114.12 pass
18.69     11.96
  Synchron part 1 41   Cmax 135.55 115.53 159.04 fail 44.99         
  Synchron part 2 31   Cmax  73.54  60.53  89.36 fail 47.50         
  Synchron   full 72   Cmax 103.50  90.30 118.62 pass
52.21     46.04
  Synchron part 1 41 AUC0-t 122.98 110.07 137.41 fail 30.47         
  Synchron part 2 31 AUC0-t  75.24  63.33  89.38 fail 41.54         
  Synchron   full 72 AUC0-t  99.01  88.86 110.32 pass
40.46     34.78



# https://www.fda.gov/media/151569/download (page 4)
# https://www.fda.gov/media/151570/download (page 4)
library(PowerTOST)
CRO     <- c("Panexcell", "Synchron")
designs <- c("2x2x2", "2x2x2")
metric  <- c("Cmax", "AUC0-t")
# arbitrary identifiers, only the last one must be "full"
study   <- c("part 1", "part 2", "full")
ns1     <- c(12, 12, 24)
ns2     <- c(41, 31, 72)
PE1     <- c( 71.26, 141.80, 100.52,
              85.41, 126.89, 104.11)
PE2     <- c(135.55,  73.54, 103.5 ,
             122.98,  75.24,  99.01)
lower1  <- c( 64.78, 124.27,  86.88,
              78.45, 115.81,  94.97)
lower2  <- c(115.53,  60.53,  90.3 ,
             110.07,  63.33,  88.86)
upper1  <- c( 78.38, 161.82, 116.31,
              93.00, 139.04, 114.12)
upper2  <- c(159.04,  89.36, 118.62,
             137.41,  89.38, 110.32)
res     <- data.frame(CRO = rep(CRO, each = length(study) * length(metric)),
                      design = rep(designs, each = length(study) * length(metric)),
                      study = rep(study, length(CRO) * length(metric)),
                      n = c(rep(ns1, length(metric)),
                            rep(ns2, length(metric))), df = NA_integer_,
                      metric = rep(rep(metric, each = length(study)), length(CRO)),
                      PE = c(PE1, PE2), lower = c(lower1, lower2),
                      upper = c(upper1, upper2), BE = "fail",
                      CV = NA_real_, CV.pooled = "")
for (j in 1:nrow(res)) {
  if (res$lower[j] >= 80 & res$upper[j] <= 125) res$BE[j] <- "pass"
  # calculate the CV from the CI
  res$CV[j] <- signif(100 * suppressMessages(
                              CI2CV(pe = res$PE[j] / 100,
                                    lower = res$lower[j] / 100,
                                    upper = res$upper[j] / 100,
                                    n = res$n[j])), 4)
  # degrees of freedom as expression
  df <- PowerTOST:::.design.df(PowerTOST:::.design.props(
                               PowerTOST:::.design.no(res$design[j])),
                                                      robust = FALSE)
  n         <- res$n[j]
  res$df[j] <- eval(df) # calculate df from sample size
}
for (j in seq_along(CRO)) {
  for (k in seq_along(metric)) {
    # extract the ‘parts’ (design, df, and CV)
    CVs <- res[res$CRO == CRO[j] & res$study != "full" &
               res$metric == metric[k], c(2, 5, 11)]
    # CV pooled from the ‘parts’
    res$CV.pooled[res$CRO == CRO[j] & res$study == "full" &
                  res$metric == metric[k]] <- signif(CVpooled(CVs)$CV, 4)
  }
}
res <- res[, -which(names(res) %in% c("design", "df"))] # no more needed
print(res, row.names = FALSE)


Dif-tor heh smusma 🖖
Helmut Schütz
[image]

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

France,
2021-09-17 17:56
(30 d 09:03 ago)

@ Helmut
Posting: # 22585
Views: 837
 

 Increased variability

Hi Helmut,

» The CVs calculated from the confidence intervals in both ‘parts’ are much lower than the ones in the ‘full’ study. Or the other way ’round: If we pool the CVs of the ‘parts’ we could expect values which are lower than the ‘observed’ (tee-hee!) ones.

Yep. The effect on the MSE is clearly visible on Figure 4 of the paper linked by ElMaestro.

Regards
Ohlbe
ElMaestro
★★★

Denmark,
2021-09-17 18:51
(30 d 08:09 ago)

@ Ohlbe
Posting: # 22586
Views: 827
 

 Increased variability

Hi all,

» » The CVs calculated from the confidence intervals in both ‘parts’ are much lower than the ones in the ‘full’ study. Or the other way ’round: If we pool the CVs of the ‘parts’ we could expect values which are lower than the ‘observed’ (tee-hee!) ones.

Correctly observed. And for exactly those reasons it makes very good sense to plot for example the RMSE, CV, SE of diff., or even the width of the CI as function of (cumulated) number of subjects.

It is not so difficult. :-)

Pass or fail!
ElMaestro
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2021-09-18 15:26
(29 d 11:33 ago)

@ ElMaestro
Posting: # 22588
Views: 743
 

 Visualization

Hi ElMaestro,

» […] it makes very good sense to plot for example the RMSE, CV, SE of diff., or even the width of the CI as function of (cumulated) number of subjects.

If you have all data, of course. A simple visualization using the res data.frame of my previous post:

[image]




windows(width = 5.5, height = 5.5)
op <- par(no.readonly = TRUE)
par(mar = c(3, 4, 2, 0), cex.axis = 0.9, cex.main = 1, font.main = 1)
split.screen(c(length(CRO), length(metric)))
scrn <- 0
for (j in seq_along(CRO)) {
  for (k in seq_along(metric)) {
    scrn <- scrn + 1
    screen(scrn)
    plot(c(0.5, length(study)+0.5), rep(100, 2), type = "n",
         ylim = range(res$lower[res$CRO == CRO[j] & res$metric == metric[k]],
                      res$upper[res$CRO == CRO[j] & res$metric == metric[k]]),
         log = "y", xlab = "", ylab = "PE, 90% CI", axes = FALSE,
         main = paste0(CRO[j], ": ", metric[k]))
    axis(2, las = 1)
    axis(1, at = seq_along(study), tick = FALSE,
         labels = paste("n =", res$n[res$CRO == CRO[j] &
                               res$metric == metric[k]]))
    abline(h = c(80, 100, 125), col = c("red", "black", "red"))
    box()
    for (l in seq_along(study)) {
      arrows(x0 = l,
             y0 = res$lower[res$CRO == CRO[j] & res$metric == metric[k] &
                            res$study == study[l]],
             y1 = res$upper[res$CRO == CRO[j] & res$metric == metric[k] &
                            res$study == study[l]], length = 0.08,
             angle = 90, lwd = 2, code = 3)
      points(l, res$PE[res$CRO == CRO[j] & res$metric == metric[k] &
                       res$study == study[l]], pch = 19, cex = 1.25)
    }
  }
}
close.screen(all = TRUE)
par(op)


Dif-tor heh smusma 🖖
Helmut Schütz
[image]

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

NJ,
2021-09-19 09:18
(28 d 17:41 ago)

@ Ohlbe
Posting: # 22589
Views: 701
 

 Another two...

HI Ohlbe

» It looks like the FDA has just keelhauled 2 CROs again:

Good that FDA caught them. Can't wait to see their clients sue their ass off for pulling those kind of stunts.

J
Activity
 Admin contact
21,731 posts in 4,544 threads, 1,543 registered users;
online 4 (0 registered, 4 guests [including 4 identified bots]).
Forum time: Monday 03:00 CEST (Europe/Vienna)

Law is mind without reason.    Aristotle

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