Cheating [GxP / QC / QA]
successful cheating is not for lay persons…
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 🖖🏼 Довге життя Україна!
![[image]](https://static.bebac.at/pics/Blue_and_yellow_ribbon_UA.png)
Helmut Schütz
![[image]](https://static.bebac.at/img/CC by.png)
The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Complete thread:
- Another two... Ohlbe 2021-09-16 23:41
- Another two... ElMaestro 2021-09-17 08:42
- Dates Ohlbe 2021-09-17 10:15
- Some more info Ohlbe 2021-09-17 20:28
- EU Article 31 referral started Ohlbe 2022-01-24 17:47
- CheatingHelmut 2021-09-17 16:50
- Increased variability Ohlbe 2021-09-17 17:56
- Increased variability ElMaestro 2021-09-17 18:51
- Visualization Helmut 2021-09-18 15:26
- Increased variability ElMaestro 2021-09-17 18:51
- Increased variability Ohlbe 2021-09-17 17:56
- Another two... jag009 2021-09-19 09:18
- Another two... ElMaestro 2022-05-24 12:00
- Blind monitors or greedy sponsors? Helmut 2022-05-24 12:51
- Blind monitors or greedy sponsors? Ohlbe 2022-05-24 14:21
- Blind monitors or greedy sponsors? Helmut 2022-05-24 16:35
- Blind monitors or greedy sponsors? ElMaestro 2022-05-25 08:11
- (Cumulative) T/R-ratio vs. time Helmut 2022-05-25 09:19
- Sponsors and CRO selection Ohlbe 2022-05-25 10:53
- I still think that T/R-ratios are useful Helmut 2022-05-25 12:04
- T/R-ratios are useful Ohlbe 2022-05-25 14:40
- T/R-ratios are useful Helmut 2022-05-25 15:35
- Bust the Buster Helmut 2022-05-26 15:32
- complicate the assessor's life mittyri 2022-05-26 18:28
- complicate the assessor's life PharmCat 2022-05-27 09:57
- complicate the assessor's life Helmut 2022-05-27 10:11
- Thanks for Busting the Buster sameep 2022-05-31 08:34
- Thanks for Busting the Buster Helmut 2022-05-31 15:22
- A small point for the code sameep 2022-06-01 13:17
- A small point for the code Helmut 2022-06-01 14:11
- A small point for the code sameep 2022-06-01 13:17
- Thanks for Busting the Buster Helmut 2022-05-31 15:22
- Thanks for Busting the Buster sameep 2022-05-31 08:34
- complicate the assessor's life mittyri 2022-05-26 18:28
- T/R-ratios are useful Ohlbe 2022-05-25 14:40
- I still think that T/R-ratios are useful Helmut 2022-05-25 12:04
- Sponsors and CRO selection Ohlbe 2022-05-25 10:53
- (Cumulative) T/R-ratio vs. time Helmut 2022-05-25 09:19
- Blind monitors or greedy sponsors? Ohlbe 2022-05-24 14:21
- Blind monitors or greedy sponsors? Helmut 2022-05-24 12:51
- Another two... ElMaestro 2021-09-17 08:42