## Achievement of Steady State: Visual inspection & common sense [General Statistics]

❝ […] achievement of Steady state using NOSTASOT (Non-Statistical-significance–of-Trend) method.

Never heard of this abbreviation. THX for the explanation.

❝ Please help me out for SAS codes for analysis.

Sorry, I’m not equipped with ‘’.

Easy in any software. Run a linear regression of pre-dose concentrations

*vs*time and test the slope against zero (or whether zero is included in the 95% CI of the slope). The former should be part of the output.

However, I don’t recommend it (see here and there). The EMA stated:*

*Achievement of steady state can be evaluated by collecting pre-dose samples on the day before the PK assessment day and on the PK assessment day. A specific statistical method to assure that steady state has been reached is not considered necessary in bioequivalence studies. Descriptive data is sufficient.*

- Regression approaches lead into trouble.
- If you have a
*small*within-subject variability of pre-dose concentrations, possibly the slope will significantly differ from zero in some subjects. You will conclude that steady state is not reached and exclude those subjects.

- If you have a
*large*within-subject variability of pre-dose concentrations, even a – visually – obvious positive slope will not significantly differ from zero. You will conclude that steady state is reached although the saturation is not complete.

- An example in at the end. Same saturation, only different variabilities of
*k*_{10}.

- If you have a
- AFAIK, not a regulatory requirement anywhere.

Simulated one-compartment model: *V* = 4, *D* = 500, *k*_{01} = 0.6931472 h^{–1}, *k*_{10} = 0.0504107 h^{–1}, *τ* = 24. Sufficient built-up of (pseudo-) state state: 96 h = 6.98 half lives.

`n <- 3 # number of pre-dose samples for the regression`

data <- data.frame(dose = 2:6, t = seq(-96, 0, 24))

# low and high variability of pre-dose concentrations

lo <- cbind(data, C = c(40.08, 51.87, 55.77, 56.64, 57.66))

hi <- cbind(data, C = c(40.41, 52.03, 55.36, 56.74, 57.25))

res <- data.frame(variability = c("low", "high"), int = NA_real_,

slope = NA_real_, signif = "no ",

CL.lo = NA_real_, CL.hi = NA_real_)

for (j in 1:nrow(res)) {

if (j == 1) {

tmp <- tail(lo, n)

} else {

tmp <- tail(hi, n)

}

muddle <- lm(C ~ t, data = tmp) # linear regression

res$int[j] <- signif(coef(muddle)[[1]], 5) # intercept

res$slope[j] <- signif(coef(muddle)[[2]], 5) # slope

if (anova(muddle)[1, 5] < 0.05) res$signif[j] <- "yes "

res[j, 5:6] <- sprintf("%+.6f", confint(muddle, level = 0.95)[2, ])

}

names(res)[4] <- "signif # 0?"

print(lo, row.names = FALSE)

print(hi, row.names = FALSE)

print(res, row.names = FALSE)

op <- par(no.readonly = TRUE)

par(mar = c(4, 4, 2.5, 0.5))

split.screen(c(2, 1))

screen(1) # saturation phase

plot(lo$t, lo$C, type = "n", axes = FALSE,

xlab = "time", ylab = "concentration",

ylim = range(c(lo$C, hi$C)))

grid(nx = NA, ny = NULL); box()

abline(v = unique(lo$t), lty = 3, col = "lightgrey")

lines(lo$t, lo$C, col = "blue", lwd = 2)

points(lo$t, lo$C, pch = 19, col = "blue", cex = 1.5)

lines(hi$t, hi$C, col = "red", lwd = 2)

points(hi$t, hi$C, pch = 19, col = "red", cex = 1.5)

axis(1, at = lo$t)

axis(2, las = 1)

axis(3, at = unique(lo$t),

label = paste0("dose #", unique(lo$dose)))

screen(2) # last 3 pre-dose concentrations

plot(tail(lo$t, n), tail(lo$C, n), type = "n", axes = FALSE,

xlab = "time", ylab = "concentration",

ylim = range(c(tail(lo$C, n), tail(hi$C, n))))

grid(nx = NA, ny = NULL); box()

abline(v = unique(tail(lo$t, n)), lty = 3, col = "lightgrey")

lines(tail(lo$t, n), tail(lo$C, n), col = "blue", lwd = 2)

lines(tail(hi$t, n), tail(hi$C, n), col = "red", lwd = 2)

segments(x0 = -48, y0 = res$int[1] - res$slope[1] *48,

x1 = 0, y1 = res$int[1], col = "blue", lty = 2)

segments(x0 = -48, y0 = res$int[2] - res$slope[2] *48,

x1 = 0, y1 = res$int[2], col = "red", lty = 2)

axis(1, at = lo$t)

axis(2, las = 1)

axis(3, at = unique(lo$t),

label = paste0("dose #", unique(lo$dose)))

close.screen(all = TRUE)

par(op)

Gives:

` dose t C`

2 -96 40.08

3 -72 51.87

4 -48 55.77

5 -24 56.64

6 0 57.66

dose t C

2 -96 40.41

3 -72 52.03

4 -48 55.36

5 -24 56.74

6 0 57.25

variability int slope signif # 0? CL.lo CL.hi

low 57.635 0.039375 yes +0.016450 +0.062300

high 57.395 0.039375 no -0.093589 +0.172339

─ low variability

─ high variability

dashed lines: linear regression

- EMEA.
*Overview of Comments received on Draft Guideline on the Investigation of Bioequivalence.*EMA/CHMP/EWP/26817/2010. London. 20 January 2010. Online.

*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:

- Achievement of Steady State arl_stat 2021-07-31 07:42 [General Statistics]
- Achievement of Steady State: Visual inspection & common senseHelmut 2021-07-31 10:58
- Achievement of Steady State: Visual inspection & common sense Ben 2021-08-05 08:08
- Threshold of % change? Helmut 2021-08-05 11:43
- Threshold of % change? Ben 2021-10-17 12:16
- Keep it simple Helmut 2021-10-20 12:36

- Threshold of % change? Ben 2021-10-17 12:16

- Threshold of % change? Helmut 2021-08-05 11:43

- Achievement of Steady State: Visual inspection & common sense Ben 2021-08-05 08:08

- Achievement of Steady State: Visual inspection & common senseHelmut 2021-07-31 10:58