arl_stat
★    

India,
2021-07-31 07:42
(47 d 13:22 ago)

Posting: # 22489
Views: 1,384
 

 Achievement of Steady State [General Sta­tis­tics]

Hello everyone. :-)

Hope all are safe in this Pandemic situation.

The query is regarding achievement of Steady state using NOSTASOT (Non-Statistical-significance–of-Trend) method.

Please help me out for SAS codes for analysis.

Thank you so much.


Edit: Category changed; see also this post #1[Helmut]
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2021-07-31 10:58
(47 d 10:06 ago)

@ arl_stat
Posting: # 22490
Views: 1,051
 

 Achievement of Steady State: Visual inspection & common sense

Hi arl_stat,

» […] 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 ‘[image]’.
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 there).
  • Leads 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 [image] at the end. Same saturation, only different variabilities of k10.
  • AFAIK, not a regulatory requirement anywhere.


Simulated one-compartment model: V = 4, D = 500, k01 = 0.6931472 h–1, k10 = 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


[image]

low variability
high variability
dashed lines: linear regression


Dif-tor heh smusma 🖖
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Ben
★    

2021-08-05 08:08
(42 d 12:56 ago)

@ Helmut
Posting: # 22509
Views: 947
 

 Achievement of Steady State: Visual inspection & common sense

Hi Helmut,

» 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 there).

So you are essentially saying statistical relevance is not the right tool here. Agreed. Instead of relying on visual inspection & gut feeling (= common sense? :-)) can we define pharmacological relevance? Is there a way to define quantitative thresholds based on the PK (or even PD?) of the compound (i.e. concentration should not change by more than x%)?

Best regards,
Ben.
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2021-08-05 11:43
(42 d 09:21 ago)

@ Ben
Posting: # 22511
Views: 918
 

 Threshold of % change?

Hi Ben,

» So you are essentially saying statistical relevance is not the right tool here. Agreed.

I was talking about statistical significance.
When it comes to a test, see the end of Section 1 in this post (EUFEPS workshop, Bonn, June 2013).

» Instead of relying on visual inspection & gut feeling (= common sense? :-)) …

Well, we are using visual inspection in other areas as well. Automatic algos for selecting time points in estimating \(\small{\hat\lambda_z}\) (e.g., \(\small{R_{\textrm{adj,max}}^{2}}\), \(\small{AIC_\textrm{min}}\), \(\small{\text{TTT}}\)) quite often fail for ‘flat’ profiles (MR) or multiphasic profiles. I’m fine with selecting time points ‘manually’. Never had any problems with acceptance.

» … can we define pharmacological relevance?

That’s actually the idea behind assessing the slope. Either we are still in the saturation phase (slope >0) or reasonably close to true steady state (slope ≈0).

» Is there a way to define quantitative thresholds based on the PK (or even PD?) of the compound (i.e. concentration should not change by more than x%)?

[image] Radio Yerevan answers: Based on PK, in principle yes.
But how could we do that? We design the study based on τ and t½. Hopefully we don’t use an average t½ – from the literature – but a worst case (i.e., a longer one).
$$C_\tau$$$$\small{
\begin{array}{crr}
\hline
\text{Dose} & \text{% of steady state} & \text{% Change} \\
\hline
1 & 50.00000 & - \\
2 & 75.00000 & 50.000000 \\
3 & 87.50000 & 16.666667 \\
4 & 93.75000 & 7.142857 \\
5 & 96.87500 & 3.333333 \\
6 & 98.43750 & 1.612903 \\
7 & 99.21875 & 0.793651 \\
\hline
\end{array}}$$Looks nice on paper. However, I see a problem here (maybe I’m wrong). In the regression we assess the last three pre-dose concentrations, which – to some extent – takes the inter-occasion variability into account. Of course, we may fall into the trap mentioned previously.
When we set a threshold of \(\small{x\%}\), we are essentially believing that the last two pre-dose concentrations are the true ones, right? Of course, that’s another trap.

Dif-tor heh smusma 🖖
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Activity
 Admin contact
21,678 posts in 4,533 threads, 1,541 registered users;
online 4 (0 registered, 4 guests [including 3 identified bots]).
Forum time: Thursday 21:05 CEST (Europe/Vienna)

Ignorance more frequently begets confidence
than does knowledge.    Charles Darwin

The Bioequivalence and Bioavailability Forum is hosted by
BEBAC Ing. Helmut Schütz
HTML5