#libraries

rm(list=ls())
#install.packages ("PopED")
library(PopED)
## Warning: package 'PopED' was built under R version 4.4.2
#packageVersion("PopED")

##Define the Model #one-compartment pharmacokinetic model with linear absorption

ff <- function(model_switch,xt,parameters,poped.db){
  with(as.list(parameters),{
    N = floor(xt/TAU)+1
    f=(DOSE*Favail/V)*(KA/(KA - CL/V)) * 
      (exp(-CL/V * (xt - (N - 1) * TAU)) * (1 - exp(-N * CL/V * TAU))/(1 - exp(-CL/V * TAU)) - 
         exp(-KA * (xt - (N - 1) * TAU)) * (1 - exp(-N * KA * TAU))/(1 - exp(-KA * TAU)))  
    return(list( f=f,poped.db=poped.db))
  })
}

#Define Parameters

sfg <- function(x,a,bpop,b,bocc){
  parameters=c( V=bpop[1]*exp(b[1]),
                KA=bpop[2]*exp(b[2]),
                CL=bpop[3]*exp(b[3]),
                Favail=bpop[4],
                DOSE=a[1],
                TAU=a[2])
}

#Define RUV

feps <- function(model_switch,xt,parameters,epsi,poped.db){
  returnArgs <- ff(model_switch,xt,parameters,poped.db) 
  f <- returnArgs[[1]]
  poped.db <- returnArgs[[2]]
 
  y = f*(1+epsi[,1])+epsi[,2]
  
  return(list(y=y,poped.db=poped.db)) 
}

#Create poped database

poped.db <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=20,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 1,2,8,240,245),
  
  # Design space
  minxt=c(0,0,0,240,240),
  maxxt=c(10,10,10,248,248),
  bUseGrouped_xt=TRUE)

#Plot model prediction

plot_model_prediction(poped.db, model_num_points = 300)

#plot the expected prediction interval

plot_model_prediction(poped.db, 
                      PI=TRUE, 
                      separate.groups=T, 
                      model_num_points = 300, 
                      sample.times = FALSE)

#predictions numerically

dat <- model_prediction(poped.db,DV=TRUE)
head(dat,n=5);tail(dat,n=5)
##   ID Time         DV      IPRED       PRED Group Model DOSE TAU
## 1  1    1 0.06544170 0.06935572 0.05325024     1     1   20  24
## 2  1    2 0.13453152 0.12033579 0.09204804     1     1   20  24
## 3  1    8 0.18595947 0.21268212 0.16409609     1     1   20  24
## 4  1  240 0.05386206 0.11492172 0.12671376     1     1   20  24
## 5  1  245 0.22051299 0.27951732 0.24980320     1     1   20  24
##     ID Time        DV     IPRED      PRED Group Model DOSE TAU
## 196 40    1 0.1408510 0.1737935 0.1065005     2     1   40  24
## 197 40    2 0.3777897 0.2751737 0.1840961     2     1   40  24
## 198 40    8 0.3302235 0.3464009 0.3281922     2     1   40  24
## 199 40  240 0.1527364 0.2051454 0.2534275     2     1   40  24
## 200 40  245 0.5939644 0.5234824 0.4996064     2     1   40  24

#evaluate the initial design

(ds1 <- evaluate_design(poped.db))
## $ofv
## [1] 39.309
## 
## $fim
##                    V          KA           CL        d_V       d_KA        d_CL
## V         0.05336692   -8.683963  -0.05863412   0.000000   0.000000    0.000000
## KA       -8.68396266 2999.851007 -14.43058560   0.000000   0.000000    0.000000
## CL       -0.05863412  -14.430586  37.15243290   0.000000   0.000000    0.000000
## d_V       0.00000000    0.000000   0.00000000 999.953587 312.240246    3.202847
## d_KA      0.00000000    0.000000   0.00000000 312.240246 439.412556    2.287838
## d_CL      0.00000000    0.000000   0.00000000   3.202847   2.287838 3412.005199
## sig_prop  0.00000000    0.000000   0.00000000 575.347261 638.581909 1182.325475
##            sig_prop
## V            0.0000
## KA           0.0000
## CL           0.0000
## d_V        575.3473
## d_KA       638.5819
## d_CL      1182.3255
## sig_prop 33864.3226
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
##  8.215338 10.090955  4.400304 39.844763 60.655110 27.562541 13.865357

#Try 5 samples with four early and one late - model “db_new1” DESIGN 2

poped.db_new1 <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=20,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 1,2,8,10,248),
  
  # Design space
  minxt=c(0,0,0,0,240),
  maxxt=c(10,10,10,10,248),
  bUseGrouped_xt=TRUE)

#evaluate the design db_new1; This is DESIGN 2 - five samples

(ds2 <- evaluate_design(poped.db_new1))
## $ofv
## [1] 38.6089
## 
## $fim
##                    V          KA         CL        d_V      d_KA       d_CL
## V         0.05603522   -7.708389  0.2139121    0.00000   0.00000    0.00000
## KA       -7.70838947 3247.802593 32.0070606    0.00000   0.00000    0.00000
## CL        0.21391207   32.007061 23.8488710    0.00000   0.00000    0.00000
## d_V       0.00000000    0.000000  0.0000000 1102.44707 246.02562   42.62909
## d_KA      0.00000000    0.000000  0.0000000  246.02562 515.05406   11.25545
## d_CL      0.00000000    0.000000  0.0000000   42.62909  11.25545 1405.95318
## sig_prop  0.00000000    0.000000  0.0000000  608.89790 795.37576 1870.41520
##            sig_prop
## V            0.0000
## KA           0.0000
## CL           0.0000
## d_V        608.8979
## d_KA       795.3758
## d_CL      1870.4152
## sig_prop 35181.7085
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
##  7.431050  8.892071  5.777082 35.440487 52.564091 44.308695 14.090858

##Try 4 samples with three early and one late - model “db_new2”; DESIGN 3 - four samples

poped.db_new2 <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=20,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 1,2,8,248),
  
  # Design space
  minxt=c(0,0,0,240),
  maxxt=c(10,10,10,248),
  bUseGrouped_xt=TRUE)

#evaluate the design db_new2; EVALUATE DESIGN 3 - four samples

(ds3 <- evaluate_design(poped.db_new2))
## $ofv
## [1] 37.02264
## 
## $fim
##                    V          KA         CL      d_V      d_KA       d_CL
## V         0.05093387   -8.914773  0.1572673   0.0000   0.00000    0.00000
## KA       -8.91477347 2962.509660 18.6114517   0.0000   0.00000    0.00000
## CL        0.15726732   18.611452 23.2198932   0.0000   0.00000    0.00000
## d_V       0.00000000    0.000000  0.0000000 910.8544 329.05905   23.04160
## d_KA      0.00000000    0.000000  0.0000000 329.0590 428.54106    3.80578
## d_CL      0.00000000    0.000000  0.0000000  23.0416   3.80578 1332.77128
## sig_prop  0.00000000    0.000000  0.0000000 545.2588 594.11904 1935.44440
##            sig_prop
## V            0.0000
## KA           0.0000
## CL           0.0000
## d_V        545.2588
## d_KA       594.1190
## d_CL      1935.4444
## sig_prop 24679.9751
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
##  9.231920 11.057673  5.789418 43.325191 63.926813 46.650646 17.228914

#Let’s try to optimize ds3. This is design db_new2; OPTIMIZE DESIGN 3

output <- poped_optim(poped.db_new2, opt_xt=TRUE)
## ===============================================================================
## Initial design evaluation
## 
## Initial OFV = 37.0226
## 
## Initial design
## expected relative standard error
## (%RSE, rounded to nearest integer)
##    Parameter   Values   RSE_0
##            V     72.8       9
##           KA     0.25      11
##           CL     3.75       6
##          d_V     0.09      43
##         d_KA     0.09      64
##         d_CL   0.0625      47
##     sig_prop     0.04      17
## 
## ==============================================================================
## Optimization of design parameters
## 
## * Optimize Sampling Schedule
## 
## ************* Iteration 1  for all optimization methods***********************
## 
## *******************************************
## Running Adaptive Random Search Optimization
## *******************************************
## Initial OFV = 37.0226
## It.   5 | OFV = 37.3458
## It.  10 | OFV = 37.4974
## It.  15 | OFV = 37.4974
## It.  20 | OFV = 37.4974
## It.  25 | OFV = 37.4974
## It.  30 | OFV = 37.4974
## It.  35 | OFV = 37.4974
## It.  40 | OFV = 37.4974
## It.  45 | OFV = 37.4974
## It.  50 | OFV = 37.5387
## It.  55 | OFV = 37.5704
## It.  60 | OFV = 37.5704
## It.  65 | OFV = 37.5704
## It.  70 | OFV = 37.5704
## It.  75 | OFV = 37.9761
## It.  80 | OFV = 39.0541
## It.  85 | OFV = 39.0541
## It.  90 | OFV = 39.2431
## It.  95 | OFV = 39.2431
## It. 100 | OFV = 39.2431
## It. 105 | OFV = 39.2431
## It. 110 | OFV = 39.2431
## It. 115 | OFV = 39.2431
## It. 120 | OFV = 39.2431
## It. 125 | OFV = 39.2431
## It. 130 | OFV = 39.2431
## It. 135 | OFV = 39.2431
## It. 140 | OFV = 39.2431
## It. 145 | OFV = 39.2431
## It. 150 | OFV = 39.2431
## It. 155 | OFV = 39.2431
## It. 160 | OFV = 39.2431
## It. 165 | OFV = 39.2431
## It. 170 | OFV = 39.2728
## It. 175 | OFV = 39.2728
## It. 180 | OFV = 39.2728
## It. 185 | OFV = 39.2728
## It. 190 | OFV = 39.2728
## It. 195 | OFV = 39.306
## It. 200 | OFV = 39.306
## It. 205 | OFV = 39.306
## It. 210 | OFV = 39.306
## It. 215 | OFV = 39.306
## It. 220 | OFV = 39.306
## It. 225 | OFV = 39.306
## It. 230 | OFV = 39.306
## It. 235 | OFV = 39.306
## It. 240 | OFV = 39.306
## It. 245 | OFV = 39.306
## It. 250 | OFV = 39.306
## It. 255 | OFV = 39.306
## It. 260 | OFV = 39.306
## It. 265 | OFV = 39.306
## It. 270 | OFV = 39.306
## It. 275 | OFV = 39.306
## It. 280 | OFV = 39.306
## It. 285 | OFV = 39.306
## It. 290 | OFV = 39.306
## It. 295 | OFV = 39.306
## It. 300 | OFV = 39.306
## It. 305 | OFV = 39.306
## It. 310 | OFV = 39.306
## It. 315 | OFV = 39.306
## It. 320 | OFV = 39.306
## It. 325 | OFV = 39.306
## It. 330 | OFV = 39.306
## It. 335 | OFV = 39.306
## It. 340 | OFV = 39.306
## It. 345 | OFV = 39.306
## It. 350 | OFV = 39.306
## It. 355 | OFV = 39.306
## It. 360 | OFV = 39.306
## It. 365 | OFV = 39.3212
## It. 370 | OFV = 39.3212
## It. 375 | OFV = 39.3212
## It. 380 | OFV = 39.3212
## It. 385 | OFV = 39.3212
## It. 390 | OFV = 39.3212
## It. 395 | OFV = 39.3212
## It. 400 | OFV = 39.3212
## 
## Total iterations: 400 
## Elapsed time: 7.61 seconds.
## 
## Final OFV =  39.32122 
## Parameters: 0.6239503 0.5691498 10 240 
## 
## *******************************************
## Running BFGS Optimization
## *******************************************
## initial  value -39.321223 
## final  value -39.321848 
## converged
## 
## *******************************************
## Running Line Search Optimization
## *******************************************
## 
##    Initial parameters: 0.5862157 0.5857712 10 240 
##    Initial OFV: 39.32185 
## 
##    Searching parameter 2 
##      Changed from 0.585771 to 10 ; OFV = 39.6065 
##    Searching parameter 4 
##      Changed from 240 to 240 ; OFV = 39.6065 
##    Searching parameter 1 
##      Changed from 0.586216 to 0.408173 ; OFV = 39.6162 
##    Searching parameter 3 
##      No change 
## 
##    Elapsed time: 3.6 seconds.
## 
##    Final OFV =  39.61624 
##    Parameters: 0.4081729 10 10 240 
## 
## *******************************************
## Stopping criteria testing
## (Compare between start of iteration and end of iteration)
## *******************************************
## Difference in OFV:  2.59
## Relative difference in OFV:  7.01%
## Efficiency: 
##   ((exp(ofv_final) / exp(ofv_init))^(1/n_parameters)) = 1.4485
## 
##  Efficiency stopping criteria: 
##   Is (1.4485 <= 1.001)?   No.
##   Stopping criteria NOT achieved.
## 
## Stopping criteria NOT achieved.
## 
## ************* Iteration 2  for all optimization methods***********************
## 
## *******************************************
## Running Adaptive Random Search Optimization
## *******************************************
## Initial OFV = 39.6162
## It.   5 | OFV = 39.6162
## It.  10 | OFV = 39.6162
## It.  15 | OFV = 39.6162
## It.  20 | OFV = 39.6162
## It.  25 | OFV = 39.6162
## It.  30 | OFV = 39.6162
## It.  35 | OFV = 39.6162
## It.  40 | OFV = 39.6162
## It.  45 | OFV = 39.6162
## It.  50 | OFV = 39.6162
## It.  55 | OFV = 39.6162
## It.  60 | OFV = 39.6162
## It.  65 | OFV = 39.6162
## It.  70 | OFV = 39.6162
## It.  75 | OFV = 39.6162
## It.  80 | OFV = 39.6162
## It.  85 | OFV = 39.6162
## It.  90 | OFV = 39.6162
## It.  95 | OFV = 39.6162
## It. 100 | OFV = 39.6162
## It. 105 | OFV = 39.6162
## It. 110 | OFV = 39.6162
## It. 115 | OFV = 39.6162
## It. 120 | OFV = 39.6162
## It. 125 | OFV = 39.6162
## It. 130 | OFV = 39.6162
## It. 135 | OFV = 39.6162
## It. 140 | OFV = 39.6162
## It. 145 | OFV = 39.6162
## It. 150 | OFV = 39.6162
## It. 155 | OFV = 39.6162
## It. 160 | OFV = 39.6162
## It. 165 | OFV = 39.6162
## It. 170 | OFV = 39.6162
## It. 175 | OFV = 39.6162
## It. 180 | OFV = 39.6162
## It. 185 | OFV = 39.6162
## It. 190 | OFV = 39.6202
## It. 195 | OFV = 39.6202
## It. 200 | OFV = 39.6202
## It. 205 | OFV = 39.6202
## It. 210 | OFV = 39.6202
## It. 215 | OFV = 39.6202
## It. 220 | OFV = 39.6202
## It. 225 | OFV = 39.6202
## It. 230 | OFV = 39.6202
## It. 235 | OFV = 39.6202
## It. 240 | OFV = 39.6202
## It. 245 | OFV = 39.6202
## It. 250 | OFV = 39.6202
## It. 255 | OFV = 39.6202
## It. 260 | OFV = 39.6202
## It. 265 | OFV = 39.6202
## It. 270 | OFV = 39.6202
## It. 275 | OFV = 39.6202
## It. 280 | OFV = 39.6202
## It. 285 | OFV = 39.6202
## It. 290 | OFV = 39.6202
## It. 295 | OFV = 39.6202
## It. 300 | OFV = 39.6202
## It. 305 | OFV = 39.6202
## It. 310 | OFV = 39.6202
## It. 315 | OFV = 39.6202
## It. 320 | OFV = 39.6202
## It. 325 | OFV = 39.6202
## It. 330 | OFV = 39.6202
## It. 335 | OFV = 39.6202
## It. 340 | OFV = 39.6202
## It. 345 | OFV = 39.6202
## It. 350 | OFV = 39.6202
## It. 355 | OFV = 39.6202
## It. 360 | OFV = 39.6202
## It. 365 | OFV = 39.6202
## It. 370 | OFV = 39.6202
## It. 375 | OFV = 39.6202
## It. 380 | OFV = 39.6202
## It. 385 | OFV = 39.6202
## Maximum number of identical optimal values reached (max_run=200), optimization stopped.
## 
## Total iterations: 385 
## Elapsed time: 7.19 seconds.
## 
## Final OFV =  39.62022 
## Parameters: 0.4927533 10 10 240 
## 
## *******************************************
## Running BFGS Optimization
## *******************************************
## initial  value -39.620225 
## final  value -39.621173 
## converged
## 
## *******************************************
## Running Line Search Optimization
## *******************************************
## 
##    Initial parameters: 0.4649298 10 10 240 
##    Initial OFV: 39.62117 
## 
##    Searching parameter 1 
##      No change 
##    Searching parameter 2 
##      Changed from 10 to 10 ; OFV = 39.6212 
##    Searching parameter 4 
##      Changed from 240 to 240 ; OFV = 39.6212 
##    Searching parameter 3 
##      Changed from 10 to 10 ; OFV = 39.6212 
## 
##    Elapsed time: 3.58 seconds.
## 
##    Final OFV =  39.62117 
##    Parameters: 0.4649298 10 10 240 
## 
## *******************************************
## Stopping criteria testing
## (Compare between start of iteration and end of iteration)
## *******************************************
## Difference in OFV:  0.00494
## Relative difference in OFV:  0.0125%
## Efficiency: 
##   ((exp(ofv_final) / exp(ofv_init))^(1/n_parameters)) = 1.0007
## 
##  Efficiency stopping criteria: 
##   Is (1.0007 <= 1.001)?   Yes.
##   Stopping criteria achieved.
## 
## Stopping criteria achieved.
## 
## ===============================================================================
## FINAL RESULTS
## Optimized Sampling Schedule
## Group 1: 0.4649     10     10    240
## Group 2: 0.4649     10     10    240
## 
## OFV = 39.6212
## 
## Efficiency: 
##   ((exp(ofv_final) / exp(ofv_init))^(1/n_parameters)) = 1.4495
## 
## Expected relative standard error
## (%RSE, rounded to nearest integer):
##    Parameter   Values   RSE_0   RSE
##            V     72.8       9     6
##           KA     0.25      11     8
##           CL     3.75       6     4
##          d_V     0.09      43    33
##         d_KA     0.09      64    53
##         d_CL   0.0625      47    29
##     sig_prop     0.04      17    19
## 
## Total running time: 23.71 seconds

#Try 3 samples; two early and one late-DESIGN 4

poped.db_new3 <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=20,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 0.5,10,240),
  
  # Design space
  minxt=c(0,0,240),
  maxxt=c(11,11,248),
  bUseGrouped_xt=TRUE)

#evaluate the design db_new3; EVALUATE DESIGN 4 (three samples)

(ds4 <- evaluate_design(poped.db_new3))
## $ofv
## [1] 37.78025
## 
## $fim
##                    V          KA          CL       d_V         d_KA
## V         0.05158055   -7.282438 -0.08707705   0.00000   0.00000000
## KA       -7.28243777 3023.869633  1.91317637   0.00000   0.00000000
## CL       -0.08707705    1.913176 35.29007085   0.00000   0.00000000
## d_V       0.00000000    0.000000  0.00000000 934.13479 219.60255779
## d_KA      0.00000000    0.000000  0.00000000 219.60256 446.57827759
## d_CL      0.00000000    0.000000  0.00000000   7.06478   0.04619622
## sig_prop  0.00000000    0.000000  0.00000000 798.11012 804.44754370
##                  d_CL  sig_prop
## V        0.000000e+00    0.0000
## KA       0.000000e+00    0.0000
## CL       0.000000e+00    0.0000
## d_V      7.064780e+00  798.1101
## d_KA     4.619622e-02  804.4475
## d_CL     3.078510e+03 1367.5364
## sig_prop 1.367536e+03 8482.8798
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
##  7.466088  8.960804  4.501765 39.251645 60.083959 30.202954 31.665172

#Let’s try to optimize ds4. This is design db_new3; OPTIMIZE DESIGN 4

output <- poped_optim(poped.db_new3, opt_xt=TRUE)
## ===============================================================================
## Initial design evaluation
## 
## Initial OFV = 37.7803
## 
## Initial design
## expected relative standard error
## (%RSE, rounded to nearest integer)
##    Parameter   Values   RSE_0
##            V     72.8       7
##           KA     0.25       9
##           CL     3.75       5
##          d_V     0.09      39
##         d_KA     0.09      60
##         d_CL   0.0625      30
##     sig_prop     0.04      32
## 
## ==============================================================================
## Optimization of design parameters
## 
## * Optimize Sampling Schedule
## 
## ************* Iteration 1  for all optimization methods***********************
## 
## *******************************************
## Running Adaptive Random Search Optimization
## *******************************************
## Initial OFV = 37.7803
## It.   5 | OFV = 37.7803
## It.  10 | OFV = 37.7803
## It.  15 | OFV = 37.7803
## It.  20 | OFV = 37.7803
## It.  25 | OFV = 37.7803
## It.  30 | OFV = 37.7803
## It.  35 | OFV = 37.7803
## It.  40 | OFV = 37.7803
## It.  45 | OFV = 37.7803
## It.  50 | OFV = 37.8366
## It.  55 | OFV = 37.8366
## It.  60 | OFV = 37.8366
## It.  65 | OFV = 37.8366
## It.  70 | OFV = 37.8366
## It.  75 | OFV = 37.8366
## It.  80 | OFV = 37.8366
## It.  85 | OFV = 37.8366
## It.  90 | OFV = 37.8366
## It.  95 | OFV = 37.8366
## It. 100 | OFV = 37.8366
## It. 105 | OFV = 37.8366
## It. 110 | OFV = 37.8366
## It. 115 | OFV = 37.8366
## It. 120 | OFV = 37.8366
## It. 125 | OFV = 37.8516
## It. 130 | OFV = 37.8516
## It. 135 | OFV = 37.8516
## It. 140 | OFV = 37.8516
## It. 145 | OFV = 37.8516
## It. 150 | OFV = 37.8516
## It. 155 | OFV = 37.8516
## It. 160 | OFV = 37.8516
## It. 165 | OFV = 37.8516
## It. 170 | OFV = 37.8516
## It. 175 | OFV = 37.8516
## It. 180 | OFV = 37.8516
## It. 185 | OFV = 37.8527
## It. 190 | OFV = 37.8527
## It. 195 | OFV = 37.8527
## It. 200 | OFV = 37.8527
## It. 205 | OFV = 37.8527
## It. 210 | OFV = 37.8527
## It. 215 | OFV = 37.8527
## It. 220 | OFV = 37.8527
## It. 225 | OFV = 37.8527
## It. 230 | OFV = 37.8527
## It. 235 | OFV = 37.8527
## It. 240 | OFV = 37.8527
## It. 245 | OFV = 37.8527
## It. 250 | OFV = 37.8527
## It. 255 | OFV = 37.8527
## It. 260 | OFV = 37.8527
## It. 265 | OFV = 37.8527
## It. 270 | OFV = 37.8527
## It. 275 | OFV = 37.8527
## It. 280 | OFV = 37.8527
## It. 285 | OFV = 37.8527
## It. 290 | OFV = 37.8527
## It. 295 | OFV = 37.8534
## It. 300 | OFV = 37.8534
## It. 305 | OFV = 37.8534
## It. 310 | OFV = 37.8534
## It. 315 | OFV = 37.8534
## It. 320 | OFV = 37.8534
## It. 325 | OFV = 37.8534
## It. 330 | OFV = 37.8534
## It. 335 | OFV = 37.8534
## It. 340 | OFV = 37.8534
## It. 345 | OFV = 37.8534
## It. 350 | OFV = 37.8534
## It. 355 | OFV = 37.8534
## It. 360 | OFV = 37.8534
## It. 365 | OFV = 37.8534
## It. 370 | OFV = 37.8534
## It. 375 | OFV = 37.8534
## It. 380 | OFV = 37.8534
## It. 385 | OFV = 37.8534
## It. 390 | OFV = 37.8534
## It. 395 | OFV = 37.8534
## It. 400 | OFV = 37.8534
## 
## Total iterations: 400 
## Elapsed time: 7.47 seconds.
## 
## Final OFV =  37.85336 
## Parameters: 0.5104325 11 240 
## 
## *******************************************
## Running BFGS Optimization
## *******************************************
## initial  value -37.853359 
## final  value -37.853360 
## converged
## 
## *******************************************
## Running Line Search Optimization
## *******************************************
## 
##    Initial parameters: 0.5095457 11 240 
##    Initial OFV: 37.85336 
## 
##    Searching parameter 1 
##      No change 
##    Searching parameter 2 
##      No change 
##    Searching parameter 3 
##      Changed from 240 to 240 ; OFV = 37.8534 
## 
##    Elapsed time: 2.88 seconds.
## 
##    Final OFV =  37.85336 
##    Parameters: 0.5095457 11 240 
## 
## *******************************************
## Stopping criteria testing
## (Compare between start of iteration and end of iteration)
## *******************************************
## Difference in OFV:  0.0731
## Relative difference in OFV:  0.194%
## Efficiency: 
##   ((exp(ofv_final) / exp(ofv_init))^(1/n_parameters)) = 1.0105
## 
##  Efficiency stopping criteria: 
##   Is (1.0105 <= 1.001)?   No.
##   Stopping criteria NOT achieved.
## 
## Stopping criteria NOT achieved.
## 
## ************* Iteration 2  for all optimization methods***********************
## 
## *******************************************
## Running Adaptive Random Search Optimization
## *******************************************
## Initial OFV = 37.8534
## It.   5 | OFV = 37.8534
## It.  10 | OFV = 37.8534
## It.  15 | OFV = 37.8534
## It.  20 | OFV = 37.8534
## It.  25 | OFV = 37.8534
## It.  30 | OFV = 37.8534
## It.  35 | OFV = 37.8534
## It.  40 | OFV = 37.8534
## It.  45 | OFV = 37.8534
## It.  50 | OFV = 37.8534
## It.  55 | OFV = 37.8534
## It.  60 | OFV = 37.8534
## It.  65 | OFV = 37.8534
## It.  70 | OFV = 37.8534
## It.  75 | OFV = 37.8534
## It.  80 | OFV = 37.8534
## It.  85 | OFV = 37.8534
## It.  90 | OFV = 37.8534
## It.  95 | OFV = 37.8534
## It. 100 | OFV = 37.8534
## It. 105 | OFV = 37.8534
## It. 110 | OFV = 37.8534
## It. 115 | OFV = 37.8534
## It. 120 | OFV = 37.8534
## It. 125 | OFV = 37.8534
## It. 130 | OFV = 37.8534
## It. 135 | OFV = 37.8534
## It. 140 | OFV = 37.8534
## It. 145 | OFV = 37.8534
## It. 150 | OFV = 37.8534
## It. 155 | OFV = 37.8534
## It. 160 | OFV = 37.8534
## It. 165 | OFV = 37.8534
## It. 170 | OFV = 37.8534
## It. 175 | OFV = 37.8534
## It. 180 | OFV = 37.8534
## It. 185 | OFV = 37.8534
## It. 190 | OFV = 37.8534
## It. 195 | OFV = 37.8534
## It. 200 | OFV = 37.8534
## Maximum number of identical optimal values reached (max_run=200), optimization stopped.
## 
## Total iterations: 200 
## Elapsed time: 3.66 seconds.
## 
## Final OFV =  37.85336 
## Parameters: 0.5095457 11 240 
## 
## *******************************************
## Running BFGS Optimization
## *******************************************
## initial  value -37.853360 
## final  value -37.853360 
## converged
## 
## *******************************************
## Running Line Search Optimization
## *******************************************
## 
##    Initial parameters: 0.5095455 11 240 
##    Initial OFV: 37.85336 
## 
##    Searching parameter 3 
##      Changed from 240 to 240 ; OFV = 37.8534 
##    Searching parameter 1 
##      No change 
##    Searching parameter 2 
##      No change 
## 
##    Elapsed time: 2.75 seconds.
## 
##    Final OFV =  37.85336 
##    Parameters: 0.5095455 11 240 
## 
## *******************************************
## Stopping criteria testing
## (Compare between start of iteration and end of iteration)
## *******************************************
## Difference in OFV:  8.95e-10
## Relative difference in OFV:  2.37e-09%
## Efficiency: 
##   ((exp(ofv_final) / exp(ofv_init))^(1/n_parameters)) = 1
## 
##  Efficiency stopping criteria: 
##   Is (1 <= 1.001)?   Yes.
##   Stopping criteria achieved.
## 
## Stopping criteria achieved.
## 
## ===============================================================================
## FINAL RESULTS
## Optimized Sampling Schedule
## Group 1: 0.5095     11    240
## Group 2: 0.5095     11    240
## 
## OFV = 37.8534
## 
## Efficiency: 
##   ((exp(ofv_final) / exp(ofv_init))^(1/n_parameters)) = 1.0105
## 
## Expected relative standard error
## (%RSE, rounded to nearest integer):
##    Parameter   Values   RSE_0   RSE
##            V     72.8       7     7
##           KA     0.25       9     9
##           CL     3.75       5     4
##          d_V     0.09      39    39
##         d_KA     0.09      60    59
##         d_CL   0.0625      30    30
##     sig_prop     0.04      32    32
## 
## Total running time: 17.69 seconds

#3 samples DESIGN 5 (based on optimization of DESIGN 4)

poped.db_new4 <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=20,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 0.51,11,240),
  
  # Design space
  minxt=c(0,0,240),
  maxxt=c(11,11,248),
  bUseGrouped_xt=TRUE)

#Evaluate DESIGN 5

(ds5 <- evaluate_design(poped.db_new4))
## $ofv
## [1] 37.85336
## 
## $fim
##                    V          KA         CL        d_V        d_KA         d_CL
## V         0.05159352   -7.093367 -0.0813758   0.000000   0.0000000    0.0000000
## KA       -7.09336696 3082.833997  4.6634624   0.000000   0.0000000    0.0000000
## CL       -0.08137580    4.663462 35.4003301   0.000000   0.0000000    0.0000000
## d_V       0.00000000    0.000000  0.0000000 934.605477 208.3495347    6.1702192
## d_KA      0.00000000    0.000000  0.0000000 208.349535 464.1534405    0.2448911
## d_CL      0.00000000    0.000000  0.0000000   6.170219   0.2448911 3097.7765865
## sig_prop  0.00000000    0.000000  0.0000000 823.328670 837.8371588 1358.3065451
##           sig_prop
## V           0.0000
## KA          0.0000
## CL          0.0000
## d_V       823.3287
## d_KA      837.8372
## d_CL     1358.3065
## sig_prop 8277.2547
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
##  7.328617  8.715463  4.491363 39.063785 58.879315 30.147990 32.451984

##now smaller numbers!! ##3 samples DESIGN 6 - REDUCE SAMPLE SIZE TO 12

poped.db_new5 <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=12,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 0.51,11,240),
  
  # Design space
  minxt=c(0,0,240),
  maxxt=c(11,11,248),
  bUseGrouped_xt=TRUE)

#EVALUATE DESIGN 6

(ds6 <- evaluate_design(poped.db_new5))
## $ofv
## [1] 34.27758
## 
## $fim
##                    V          KA          CL        d_V        d_KA
## V         0.03095611   -4.256020 -0.04882548   0.000000   0.0000000
## KA       -4.25602018 1849.700398  2.79807746   0.000000   0.0000000
## CL       -0.04882548    2.798077 21.24019806   0.000000   0.0000000
## d_V       0.00000000    0.000000  0.00000000 560.763286 125.0097208
## d_KA      0.00000000    0.000000  0.00000000 125.009721 278.4920643
## d_CL      0.00000000    0.000000  0.00000000   3.702132   0.1469347
## sig_prop  0.00000000    0.000000  0.00000000 493.997202 502.7022953
##                  d_CL  sig_prop
## V           0.0000000    0.0000
## KA          0.0000000    0.0000
## CL          0.0000000    0.0000
## d_V         3.7021315  493.9972
## d_KA        0.1469347  502.7023
## d_CL     1858.6659519  814.9839
## sig_prop  814.9839271 4966.3528
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
##  9.461204 11.251615  5.798325 50.431130 76.012869 38.920888 41.895331

##3 samples DESIGN 7 - REDUCE SAMPLE SIZE TO 8

poped.db_new6 <- create.poped.database(
  # Model
  ff_fun=ff,
  fg_fun=sfg,
  fError_fun=feps,
  bpop=c(V=72.8,KA=0.25,CL=3.75,Favail=0.9), 
  notfixed_bpop=c(1,1,1,0),
  d=c(V=0.09,KA=0.09,CL=0.25^2), 
  sigma=c(prop=0.04,add=5e-6),
  notfixed_sigma=c(1,0),
  
  # Design
  m=2,
  groupsize=8,
  a=list(c(DOSE=20,TAU=24),c(DOSE=40, TAU=24)),
  maxa=c(DOSE=200,TAU=24),
  mina=c(DOSE=0,TAU=24),
  xt=c( 0.51,11,240),
  
  # Design space
  minxt=c(0,0,240),
  maxxt=c(11,11,248),
  bUseGrouped_xt=TRUE)

#EVALUATE DESIGN 7

(ds7 <- evaluate_design(poped.db_new6))
## $ofv
## [1] 31.43932
## 
## $fim
##                    V          KA          CL        d_V         d_KA
## V         0.02063741   -2.837347 -0.03255032   0.000000   0.00000000
## KA       -2.83734678 1233.133599  1.86538498   0.000000   0.00000000
## CL       -0.03255032    1.865385 14.16013204   0.000000   0.00000000
## d_V       0.00000000    0.000000  0.00000000 373.842191  83.33981390
## d_KA      0.00000000    0.000000  0.00000000  83.339814 185.66137622
## d_CL      0.00000000    0.000000  0.00000000   2.468088   0.09795645
## sig_prop  0.00000000    0.000000  0.00000000 329.331468 335.13486353
##                  d_CL  sig_prop
## V        0.000000e+00    0.0000
## KA       0.000000e+00    0.0000
## CL       0.000000e+00    0.0000
## d_V      2.468088e+00  329.3315
## d_KA     9.795645e-02  335.1349
## d_CL     1.239111e+03  543.3226
## sig_prop 5.433226e+02 3310.9019
## 
## $rse
##         V        KA        CL       d_V      d_KA      d_CL  sig_prop 
## 11.587561 13.780357  7.101469 61.765268 93.096371 47.668157 51.311092

#compare designs

(design_eval <- round(data.frame("Design 1"=ds1$rse,"Design 2"=ds2$rse,"Design 3"=ds3$rse,"Design 4"=ds4$rse,"Design 5"=ds5$rse,"Design 6"=ds6$rse,"Design 7"=ds7$rse)))
##          Design.1 Design.2 Design.3 Design.4 Design.5 Design.6 Design.7
## V               8        7        9        7        7        9       12
## KA             10        9       11        9        9       11       14
## CL              4        6        6        5        4        6        7
## d_V            40       35       43       39       39       50       62
## d_KA           61       53       64       60       59       76       93
## d_CL           28       44       47       30       30       39       48
## sig_prop       14       14       17       32       32       42       51