Brus
☆

Spain,
2022-12-25 10:21
(42 d 17:46 ago)

Posting: # 23410
Views: 707

## How to calculate With­in-sub­ject vari­abi­lity in a replicated BE [General Sta­tis­tics]

Hi to everybody,

I have calculated the ISCV% from a replicated BE with the estimated s2wr. For this, I have calculated the standar deviation of the two observations (BE replicated) of each subject, then I have calculated the mean of all SD, and with that mean of SD I have calculated the ISCV% according to the below formula:

CV%= 100*square root(e^s2wr-1)

Can anyone confirm that it is correct?

Thank you so much,

Best regards,
Helmut
★★★  Vienna, Austria,
2022-12-25 13:17
(42 d 14:51 ago)

@ Brus
Posting: # 23411
Views: 590

## Models, models!

Hi Brus,

❝ Can anyone confirm that it is correct?

That’s an approximation (like a model with subject as the only effect).
According to the EMA’s Q&A document we have to fit a linear model of R-data with fixed effects sequence, subject(sequence), period and calculate CVwR from the models’ residual MSE. As usual, you could drop sequence (keep only subject and period). library(replicateBE) library(PowerTOST) df       <- data.frame(method = c("approximate", "simple", "EMA",                                   "no sequence", "FDA"),                        CVwR = NA_real_) # EMA reference data set I, only untransformed PK after R dataR    <- rds01[rds01$treatment == "R", c(1:3, 5)] subj <- levels(dataR$subject) varR     <- rep(NA_real_, length(subj)) dlat     <- data.frame(sequence = NA, cont = rep(NA_real_, length(subj))) for (j in seq_along(subj)) {   varR[j] <- var(log(dataR[dataR$subject == subj[j], "PK"])) if (length(dataR[dataR$subject == subj[j], "PK"]) == 2) {     # intra-subject contrast     dlat$cont[j] <- diff(log(dataR[dataR$subject == subj[j], "PK"]))     dlat$sequence[j] <- as.character(unique(dataR[dataR$subject == subj[j], "sequence"]))   } } dlat$sequence <- factor(dlat$sequence) # All analysis on complete cases only! # Approximation df[1, 2] <- 100 * mse2CV(mean(varR, na.rm = TRUE)) # Simple model mod1     <- lm(log(PK) ~ subject, data = dataR, na.action = na.omit) df[2, 2] <- 100 * mse2CV(anova(mod1)["Residuals", "Mean Sq"]) # Model acc. to the EMA’s Q&A document mod2     <- lm(log(PK) ~ sequence + subject %in% sequence + period,                          data = dataR, na.action = na.omit) df[3, 2] <- 100 * mse2CV(anova(mod2)["Residuals", "Mean Sq"]) # Sequence effects dropped mod3     <- lm(log(PK) ~ subject + period, data = dataR, na.action = na.omit) df[4, 2] <- 100 * mse2CV(anova(mod3)["Residuals", "Mean Sq"]) # FDA’s model mod4     <- lm(cont ~ sequence, data = dlat, na.action = na.omit) df[5, 2] <- 100 * mse2CV(anova(mod4)["Residuals", "Mean Sq"] / 2) print(df, digits = 5, row.names = FALSE, right = FALSE)  method      CVwR   approximate 47.627  simple      47.627  EMA         46.964  no sequence 46.964  FDA         46.964

BTW, from the FDA’s mixed-effects model we could directly get CVwR with 47.328. I love lacking harmonization.

Dif-tor heh smusma 🖖🏼 Довге життя Україна! Helmut Schütz The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes  Ing. Helmut Schütz 