Graphing Mean PK profile [🇷 for BE/BA]
Hi roman_max,
Any kind of plot is problematic. Given, some guidelines require them (e.g., the Canadian guidance). We should be aware that such a plot gives just an impression and is not related with the assessment of BE.
I once received a deficiency letter asking for a clarification why in plots of geometric mean profiles the highest concentrations and their time points didn’t agree with the reported Cmax/tmax. Well, C at any given time point has nothing to do with the individual Cmax-values and their geometric mean. Oh, dear!
There’s another obstacle. How to deal with BQLs? If you set them to
Some people set all BQLs to zero in order to calculate the arithmetic mean. Others set the first BQL after tmax to LLOQ/2, and, and, and… There will always be a bias.
❝ ❝ The sponsor should re-consider this idea. Box-plots are nonparametric. For log-normal distributed data (which we likely have) the median is an estimate of the geometric mean. If we want to go this way, the arithmetic mean is not a good idea.
❝
❝ Agree, but if it is easier for Sponsor to view and "understand" data, no problem.
Any kind of plot is problematic. Given, some guidelines require them (e.g., the Canadian guidance). We should be aware that such a plot gives just an impression and is not related with the assessment of BE.
I once received a deficiency letter asking for a clarification why in plots of geometric mean profiles the highest concentrations and their time points didn’t agree with the reported Cmax/tmax. Well, C at any given time point has nothing to do with the individual Cmax-values and their geometric mean. Oh, dear!
There’s another obstacle. How to deal with BQLs? If you set them to
NA
(in R) or keep them as a character-code (Phoenix/WinNonlin) you open Pandora’s box. Let’s have a look at the 16 h time point of my example:loc.stat <- function(x, type, na.rm) {
non.numerics <- which(is.na(suppressWarnings(as.numeric(x))))
x[non.numerics] <- NA
x <- as.numeric(x)
switch(type,
arith.mean = round(mean(x, na.rm=na.rm), 2),
median = round(median(x, na.rm=na.rm), 2),
geom.mean = round(exp(mean(log(x), na.rm=na.rm)), 2),
harm.mean = round(length(x)/sum(1/x, na.rm=na.rm), 2))
}
C <- c(rep("BQL", 2), 9.87, rep("BQL", 2), 15.4, 13.0, 35.2,
rep("BQL", 4), 9.91, 9.43, rep("BQL", 2), 16.6, rep("BQL", 4),
5.69, 21.2, 10.4)
df <- data.frame(statistic=c(rep("arith.mean", 2), rep("median", 2),
rep("geom.mean", 2), rep("harm.mean", 2)),
na.rm=rep(c(FALSE, TRUE), 4),
location=NA, stringsAsFactors=FALSE)
for (j in 1:nrow(df)) {
df$location[j] <- loc.stat(C, df$statistic[j], df$na.rm[j])
}
print(df, row.names=FALSE)
statistic na.rm location
arith.mean FALSE NA
arith.mean TRUE 14.67
median FALSE NA
median TRUE 11.70
geom.mean FALSE NA
geom.mean TRUE 12.98
harm.mean FALSE NA
harm.mean TRUE 27.98 # not meaningful, only for completeness
Some people set all BQLs to zero in order to calculate the arithmetic mean. Others set the first BQL after tmax to LLOQ/2, and, and, and… There will always be a bias.
—
Dif-tor heh smusma 🖖🏼 Довге життя Україна!
Helmut Schütz
The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
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:
- Graphing Mean PK profile roman_max 2019-04-23 16:01 [🇷 for BE/BA]
- Graphing Mean PK profile Shuanghe 2019-04-23 18:31
- Graphing Mean PK profile roman_max 2019-04-24 12:29
- Graphing Mean PK profile Helmut 2019-04-23 22:23
- Graphing Mean PK profile nobody 2019-04-24 11:23
- Graphing Mean PK profile Helmut 2019-04-24 11:49
- Graphing Mean PK profile nobody 2019-04-24 11:53
- Graphing Mean PK profile Helmut 2019-04-24 12:32
- Graphing Mean PK profile nobody 2019-04-24 12:49
- Graphing Mean PK profile Helmut 2019-04-24 12:32
- Graphing Mean PK profile nobody 2019-04-24 11:53
- Graphing Mean PK profile Helmut 2019-04-24 11:49
- Graphing Mean PK profile roman_max 2019-04-24 12:36
- Graphing Mean PK profileHelmut 2019-04-24 13:50
- Graphing Mean PK profile nobody 2019-04-24 14:15
- Graphing Mean PK profile Helmut 2019-04-24 14:41
- Pasta Ohlbe 2019-04-25 12:47
- Pasta nobody 2019-04-25 14:36
- Spaghetti Viennese Helmut 2019-04-25 14:39
- Spaghetti Viennese nobody 2019-04-25 15:08
- OT: Blume/Mutschler Helmut 2019-04-25 15:32
- OT: Blume/Mutschler nobody 2019-04-25 15:43
- OT: Blume/Mutschler Helmut 2019-04-25 15:32
- Spaghetti Viennese nobody 2019-04-25 15:08
- Pasta Ohlbe 2019-04-25 12:47
- Graphing Mean PK profile Helmut 2019-04-24 14:41
- Graphing Mean PK profile nobody 2019-04-24 14:15
- Graphing Mean PK profileHelmut 2019-04-24 13:50
- A lie is a lie is a lie ... d_labes 2019-04-25 19:59
- Graphing Mean PK profile nobody 2019-04-24 11:23
- Graphing Mean PK profile Shuanghe 2019-04-23 18:31