10.4 Analytical Example: Pharmacokinetics

See “Analytical Solution of Linear Multi-compartment Models with Non-zero Initial Condition and Its Implementation with R”

\[\frac{d\vec{X}}{dt} = A \vec{X} + \vec{f(t)}\] with the initial conditin \(\vec{X_0}\)

\[\vec{X(t)} = \vec{X_H(t)} + \vec{X_P(t)}\] \[\vec{X(t)} = exp(At) \vec{X_0} + exp(At)*\vec{f(t)}\] \[\vec{X(t)} = exp(At) \vec{X_0} + \int_0^t exp[A(t-\tau)]f(\tau)d\tau\]

10.4.1 Data Preparation

TIME0 = c(1, 2, 4, 8, 12)
TIME = c(TIME0, TIME0 + 24, TIME0 + 48)
DV = rep(NA, length(TIME))
Obs = cbind(TIME, DV)

TIME = c(0, 24, 48)
AMT = c(100, 150, 100)
RATE = c(0, 50, 0)
CMT = c(2, 2, 1)
DoseHist = cbind(TIME, AMT, RATE, CMT)

DAT = merge(Obs, DoseHist, all=TRUE) ; DAT
##    TIME DV AMT RATE CMT
## 1     0 NA 100    0   2
## 2     1 NA  NA   NA  NA
## 3     2 NA  NA   NA  NA
## 4     4 NA  NA   NA  NA
## 5     8 NA  NA   NA  NA
## 6    12 NA  NA   NA  NA
## 7    24 NA 150   50   2
## 8    25 NA  NA   NA  NA
## 9    26 NA  NA   NA  NA
## 10   28 NA  NA   NA  NA
## 11   32 NA  NA   NA  NA
## 12   36 NA  NA   NA  NA
## 13   48 NA 100    0   1
## 14   49 NA  NA   NA  NA
## 15   50 NA  NA   NA  NA
## 16   52 NA  NA   NA  NA
## 17   56 NA  NA   NA  NA
## 18   60 NA  NA   NA  NA

10.4.2 Solution using R Package ‘wnl’

DAT2 = ExpandDH(DAT) ; DAT2
##    TIME DV AMT RATE CMT BOLUS RATE2
## 1     0  0 100    0   2   100     0
## 2     1  0   0    0   0     0     0
## 3     2  0   0    0   0     0     0
## 4     4  0   0    0   0     0     0
## 5     8  0   0    0   0     0     0
## 6    12  0   0    0   0     0     0
## 7    24  0 150   50   2     0    50
## 8    25  0   0    0   2     0    50
## 9    26  0   0    0   2     0    50
## 19   27  0   0    0   0     0     0
## 10   28  0   0    0   0     0     0
## 11   32  0   0    0   0     0     0
## 12   36  0   0    0   0     0     0
## 13   48  0 100    0   1   100     0
## 14   49  0   0    0   0     0     0
## 15   50  0   0    0   0     0     0
## 16   52  0   0    0   0     0     0
## 17   56  0   0    0   0     0     0
## 18   60  0   0    0   0     0     0
# 1 Comp
X1 = Comp1(Ke=0.1, Ka=1, DAT2) ; X1
##            [,1]    [,2]
##  [1,] 0.000e+00   0.000
##  [2,] 0.000e+00  90.484
##  [3,] 0.000e+00  81.873
##  [4,] 0.000e+00  67.032
##  [5,] 0.000e+00  44.933
##  [6,] 0.000e+00  30.119
##  [7,] 0.000e+00   9.072
##  [8,] 0.000e+00  55.790
##  [9,] 0.000e+00  98.062
## [10,] 0.000e+00 136.311
## [11,] 0.000e+00 123.340
## [12,] 0.000e+00  82.677
## [13,] 0.000e+00  55.420
## [14,] 0.000e+00  16.692
## [15,] 3.679e+01  74.766
## [16,] 1.353e+01  89.599
## [17,] 1.832e+00  83.634
## [18,] 3.355e-02  57.388
## [19,] 6.144e-04  38.493
matplot(DAT2[, "TIME"], X1, type="l")

# 2 Comp
Sol = SolComp2(K10=0.1, K12=3, K21=1)
X2 = nComp(Sol, Ka=1, DAT2) ; X2
##            [,1]  [,2]   [,3]
##  [1,] 0.000e+00  0.00   0.00
##  [2,] 0.000e+00 24.79  71.00
##  [3,] 0.000e+00 22.95  70.49
##  [4,] 0.000e+00 21.83  67.13
##  [5,] 0.000e+00 19.79  60.86
##  [6,] 0.000e+00 17.94  55.17
##  [7,] 0.000e+00 13.36  41.10
##  [8,] 0.000e+00 34.09  67.75
##  [9,] 0.000e+00 45.53 102.32
## [10,] 0.000e+00 56.55 136.19
## [11,] 0.000e+00 46.25 141.60
## [12,] 0.000e+00 41.78 128.50
## [13,] 0.000e+00 37.88 116.49
## [14,] 0.000e+00 28.22  86.78
## [15,] 3.679e+01 51.20 122.38
## [16,] 1.353e+01 50.36 141.38
## [17,] 1.832e+00 47.96 145.66
## [18,] 3.355e-02 43.47 133.67
## [19,] 6.144e-04 39.41 121.20
matplot(DAT2[, "TIME"], X2, type="l")

# 3 Comp
Sol = SolComp3(K10=0.1, K12=3, K21=1, K13=2, K31=0.5)
X3 = nComp(Sol, Ka=1, DAT2) ; X3
##            [,1]   [,2]  [,3]   [,4]
##  [1,] 0.000e+00  0.000  0.00   0.00
##  [2,] 0.000e+00 13.005 44.19  40.02
##  [3,] 0.000e+00 12.206 39.86  43.91
##  [4,] 0.000e+00 11.605 35.95  46.04
##  [5,] 0.000e+00 10.954 33.32  44.82
##  [6,] 0.000e+00 10.423 31.66  42.74
##  [7,] 0.000e+00  8.994 27.32  36.88
##  [8,] 0.000e+00 22.781 46.58  52.00
##  [9,] 0.000e+00 28.924 67.17  72.67
## [10,] 0.000e+00 34.825 86.10  94.65
## [11,] 0.000e+00 26.683 84.49 101.58
## [12,] 0.000e+00 24.913 75.89 101.67
## [13,] 0.000e+00 23.688 71.96  97.11
## [14,] 0.000e+00 20.439 62.08  83.81
## [15,] 3.679e+01 34.920 87.37 103.92
## [16,] 1.353e+01 33.228 96.38 116.45
## [17,] 1.832e+00 31.441 95.93 123.95
## [18,] 3.355e-02 29.631 90.11 121.19
## [19,] 6.144e-04 28.190 85.63 115.58
matplot(DAT2[, "TIME"], X3, type="l")