[This article was first published on Wiekvoet, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Chapter 19 of Rowland and Tozer (Clinical pharmacokinetics and pharmacodynamics, 4th edition) has distribution kinetics. I am examining problem 3. It is fairly easy, especially since essentially all formulas are on the same page under ‘key relationships’. The only difficulty is that the formulas are symmetrical in λ1, c1 and λ2, c2 and they are exchanged between chains. For this I forced λ1>λ2. In addition, I do not really believe concentrations in the 4000 range are as accurately measured as those in the 5 range (in the period 1/2 hour to 1 hour, the decrease is about 80 units per minute). The measurement error is now proportional to concentration.Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Data and model
C19SP3 <- data.frame(time=c(0.5,1,1.5,2,3,4,5,8,12,16,24,36,48),
conc=c(4211,1793,808,405,168,122,101,88,67,51,30,13,6))
library(R2jags)
datain <- list(
time=C19SP3$time,
lconc=log(C19SP3$conc),
n=nrow(C19SP3),
dose=30*1000)
model1 <- function() {
tau <- 1/pow(sigma,2)
sigma ~ dunif(0,100)
llambda1 ~dlnorm(.4,.1)
cc1 ~ dlnorm(1,.01)
llambda2 ~dlnorm(.4,.1)
cc2 ~ dlnorm(1,.01)
choice <- llambda1>llambda2
c1 <- choice*cc1+(1-choice)*cc2
c2 <- choice*cc2+(1-choice)*cc1
lambda1 <- choice*llambda1+(1-choice)*llambda2
lambda2 <- choice*llambda2+(1-choice)*llambda1
for (i in 1:n) {
pred[i] <- log(c1*exp(-lambda1*time[i]) +c2*exp(-lambda2*time[i]))
lconc[i] ~ dnorm(pred[i],tau)
}
V1 <- dose/(c1+c2)
AUC <- c1/lambda1+c2/lambda2
CL <- dose/AUC
V <- CL/lambda2
Vss <- dose*(c1/pow(lambda1,2)+c2/pow(lambda2,2))/pow(AUC,2)
}
parameters <- c(‘c1′,’c2′,’lambda1′,’lambda2’ ,
‘V1′,’CL’,’Vss’,’AUC’,’V’)
inits <- function()
list(
sigma=rnorm(1,1,.1),
cc1=9000,
cc2=150)
jagsfit <- jags(datain, model=model1,
inits=inits,
parameters=parameters,progress.bar=”gui”,
n.chains=4,n.iter=14000,n.burnin=5000,n.thin=2)
Results
Results same as in the book:
Inference for Bugs model at “C:\…5a.txt”, fit using jags,
4 chains, each with 14000 iterations (first 5000 discarded), n.thin = 2
n.sims = 18000 iterations saved
mu.vect sd.vect 2.5% 25% 50% 75% 97.5% Rhat n.eff
AUC 7752.778 130.145 7498.102 7670.443 7751.138 7831.068 8016.879 1.002 3000
CL 3.871 0.065 3.742 3.831 3.870 3.911 4.001 1.002 3000
V 57.971 1.210 55.650 57.215 57.956 58.708 60.401 1.002 4000
V1 2.980 0.104 2.776 2.915 2.978 3.044 3.192 1.002 2800
Vss 18.038 0.600 16.865 17.662 18.029 18.404 19.251 1.002 3900
c1 9933.578 352.138 9253.229 9709.652 9927.037 10145.611 10659.610 1.002 2800
c2 147.197 2.412 142.333 145.734 147.207 148.659 152.069 1.001 5000
lambda1 1.790 0.028 1.734 1.772 1.790 1.807 1.847 1.002 2800
lambda2 0.067 0.001 0.065 0.066 0.067 0.067 0.068 1.001 10000
deviance -59.366 4.394 -65.150 -62.608 -60.275 -57.058 -48.524 1.001 4100
For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).
DIC info (using the rule, pD = var(deviance)/2)
pD = 9.6 and DIC = -49.7
DIC is an estimate of expected predictive error (lower deviance is better).
Plot
The plot has narrow intervals, which is a reflection of the small intervals in the parameters.
Previous posts in this series:
Simple Pharmacokinetics with JagsPK calculation of IV and oral dosing in JAGS Translated in Stan by Bob Carpenter here: Stan Model of the Week: PK Calculation of IV and Oral Dosing
PK calculations for infusion at constant rate
PK calculations for infusion at constant rate
To leave a comment for the author, please follow the link and comment on their blog: Wiekvoet.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.