design1
Data for this example result from a PKPD population study on a non-steroidal molecule (Flores-Murrieta et al. 1998). Single doses of 1, 3.2, 10, 31.6, 56.2, or 100mg/kg per os were given respectively to 6 groups, each of which contained at least 6 rats (weighing 200g on average), following a parallel design. Blood sampling and drug response (DI score) evaluation were conducted at 0, 15, 30, and 45 min and at 1, 1.25, 1.5, 2, 3 and 4 hours after administration.
Based on the evaluation results, we choose to optimize a design for 30 rats receiving a single dose of either 100mg/kg or 320 mg/kg, selecting only 3 from previously defined time points for blood sampling and response evaluation by using Fedorov-Wynn method and Multiplicative Algorithm.
Reports of the design evaluation and optimization are available at https://github.com/iame-researchCenter/PFIM
modelParameters = list(
ModelParameter( name = "V",
distribution = LogNormal( mu = 0.74, omega = 0.316 ) ),
ModelParameter( name = "Cl",
distribution = LogNormal( mu = 0.28, omega = 0.456 ) ),
ModelParameter( name = "ka",
distribution = LogNormal( mu = 10, omega = sqrt( 0 ) ), fixedMu = TRUE ),
ModelParameter( name = "kout",
distribution = LogNormal( mu = 6.14, omega = 0.947 ) ),
ModelParameter( name = "Rin",
distribution = LogNormal( mu = 614, omega = sqrt( 0 ) ), fixedMu = TRUE ),
ModelParameter( name = "Imax",
distribution = LogNormal( mu = 0.76, omega = 0.439 ) ),
ModelParameter( name = "IC50",
distribution = LogNormal( mu = 9.22, omega = 0.452 ) ),
ModelParameter( name = "gamma",
distribution = LogNormal( mu = 2.77, omega = 1.761 ) )
)
- create the administration parameters for the response PK
- create the sampling times for the responses PK and PD
# sampling times
samplingTimesRespPK = SamplingTimes( outcome = "RespPK",
samplings = c( 0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4 ) )
samplingTimesRespPD = SamplingTimes( outcome = "RespPD",
samplings = c( 0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4 ) )
## arms
# Administrations
administrationRespPK1 = Administration( outcome = "RespPK", timeDose = c(0), dose = c( 0.2 ) )
arm1 = Arm( name = "0.2mg Arm",
size = 6,
administrations = list( administrationRespPK1 ) ,
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
initialCondition = list( "Cc" = 0,
"E" = 100 ) )
# Administrations
administrationRespPK2 = Administration( outcome = "RespPK", timeDose = c(0), dose = c( 0.64 ) )
arm2 = Arm( name = "0.64mg Arm",
size = 6,
administrations = list( administrationRespPK2 ) ,
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
initialCondition = list( "Cc" = 0,
"E" = 100 ) )
# Administrations
administrationRespPK3 = Administration( outcome = "RespPK", timeDose = c(0), dose = c( 2 ) )
arm3 = Arm( name = "2mg Arm",
size = 6,
administrations = list( administrationRespPK3 ) ,
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
initialCondition = list( "Cc" = 0,
"E" = 100 ) )
# Administrations
administrationRespPK4 = Administration( outcome = "RespPK", timeDose = c(0), dose = c( 6.24 ) )
arm4 = Arm( name = "6.24mg Arm",
size = 6,
administrations = list( administrationRespPK4 ) ,
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
initialCondition = list( "Cc" = 0,
"E" = 100 ) )
# Administrations
administrationRespPK5 = Administration( outcome = "RespPK", timeDose = c(0), dose = c( 11.24 ) )
arm5 = Arm( name = "11.24mg Arm",
size = 6,
administrations = list( administrationRespPK5 ) ,
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
initialCondition = list( "Cc" = 0,
"E" = 100 ) )
# Administrations
administrationRespPK6 = Administration( outcome = "RespPK", timeDose = c(0), dose = c( 20 ) )
arm6 = Arm( name = "20mg Arm",
size = 6,
administrations = list( administrationRespPK6 ) ,
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
initialCondition = list( "Cc" = 0,
"E" = 100 ) )
design1
evaluationFIM = Evaluation( name = "",
modelEquations = modelEquations,
modelParameters = modelParameters,
modelError = modelError,
outcomes = list( "RespPK" = "Cc", "RespPD" = "E" ),
designs = list( design1 ),
fim = "population",
odeSolverParameters = list( atol = 1e-4, rtol = 1e-4 ) )
evaluationFIM = run( evaluationFIM )
evaluationInd = Evaluation( name = "",
modelEquations = modelEquations,
modelParameters = modelParameters,
modelError = modelError,
outcomes = list( "RespPK" = "Cc", "RespPD" = "E" ),
designs = list( design1 ),
fim = "individual",
odeSolverParameters = list( atol = 1e-4, rtol = 1e-4 ) )
evaluationInd = run( evaluationInd )
evaluationBay = Evaluation( name = "",
modelEquations = modelEquations,
modelParameters = modelParameters,
modelError = modelError,
outcomes = list( "RespPK" = "Cc", "RespPD" = "E" ),
designs = list( design1 ),
fim = "Bayesian",
odeSolverParameters = list( atol = 1e-4, rtol = 1e-4 ) )
evaluationBay = run( evaluationBay )
We create sampling times that will be used in the initial design for comparison during the optimization process.
samplingConstraintsRespPK = SamplingTimeConstraints( outcome = "RespPK",
initialSamplings = c( 0.25, 0.75, 1, 1.5, 2, 4, 6 ),
fixedTimes = c( 0.25, 4 ),
numberOfsamplingsOptimisable = 3
)
samplingConstraintsRespPD = SamplingTimeConstraints( outcome = "RespPD",
initialSamplings = c( 0.25, 0.75, 1.5, 2, 3, 6, 8, 12 ),
fixedTimes = c( 2, 6 ),
numberOfsamplingsOptimisable = 3 )
armConstraint = Arm( name = "armConstraint",
size = 30,
administrations = list( administrationRespPK1 ),
samplingTimes = list( samplingTimesRespPK, samplingTimesRespPD ),
administrationsConstraints = list( administrationConstraintsResp ),
samplingTimesConstraints = list( samplingConstraintsRespPK, samplingConstraintsRespPD ),
initialCondition = list( "Cc" = 0,
"E" = "Rin/kout" )
)
designConstraint = Design( name = "designConstraint",
arms = list( armConstraint ), numberOfArms = 30 )
optimizationFWPopFIM = Optimization( name = "PKPD_ODE_multi_doses_populationFIM",
modelEquations = modelEquations,
modelParameters = modelParameters,
modelError = modelError,
optimizer = "FedorovWynnAlgorithm",
optimizerParameters = list( elementaryProtocols = initialElementaryProtocols,
numberOfSubjects = numberOfSubjects,
proportionsOfSubjects = proportionsOfSubjects,
showProcess = T ),
designs = list( designConstraint ),
fim = "population",
outcomes = list( "RespPK" = "Cc","RespPD" = "E" ),
odeSolverParameters = list( atol = 1e-8, rtol = 1e-8 ) )
optimizationFWPopFIM = run( optimizationFWPopFIM )
optimizationMultPopFIM = Optimization( name = "PKPD_ODE_multi_doses_populationFIM",
modelEquations = modelEquations,
modelParameters = modelParameters,
modelError = modelError,
optimizer = "MultiplicativeAlgorithm",
optimizerParameters = list( lambda = 0.99,
numberOfIterations = 1000,
delta = 1e-04, showProcess = T ),
designs = list( designConstraint ),
fim = "population",
outcomes = list( "RespPK" = "Cc","RespPD" = "E" ),
odeSolverParameters = list( atol = 1e-8, rtol = 1e-8 ) )