Cheating [GxP / QC / QA]
successful cheating is not for lay persons… -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
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 [GxP / QC / QA]
- 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