design1Data for this example result from a PKPD population study on anon-steroidal molecule(Flores-Murrieta et al. 1998).Single doses of 1, 3.2, 10, 31.6, 56.2, or 100mg/kg per os were givenrespectively to 6 groups, each of which contained at least 6 rats(weighing 200g on average), following a parallel design. Blood samplingand drug response (DI score) evaluation were conducted at 0, 15, 30, and45 min and at 1, 1.25, 1.5, 2, 3 and 4 hours after administration. Basedon the evaluation results, we choose to optimize a design for 30 ratsreceiving a single dose of either 100mg/kg or 320 mg/kg, selecting only3 from previously defined time points for blood sampling and responseevaluation by using Fedorov-Wynn method and Multiplicative Algorithm.Reports of the design evaluation and optimization are available athttps://github.com/packagePFIM/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 ) ) )# sampling timessamplingTimesRespPK=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 ) )# Define the arms and the administrationsadministrationRespPK1=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 ) )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 ) )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 ) )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 ) )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 ) )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 ) )design1evaluationPop=Evaluation(name =" ",modelEquations = modelEquations,modelParameters = modelParameters,modelError = modelError,outputs =list("RespPK"="Cc","RespPD"="E" ),designs =list( design1 ),fimType ="population",odeSolverParameters =list(atol =1e-8,rtol =1e-8 ) )evaluationPop=run( evaluationPop )plotOptions=list(unitTime =c("hour"),unitOutcomes =c("mcg/mL","DI%") )plotEvaluation=plotEvaluation( evaluationPop, plotOptions )plotSensitivityIndices=plotSensitivityIndices( evaluationPop, plotOptions )SE=plotSE( evaluationPop )RSE=plotRSE( evaluationPop )# examplesplotOutcomesEvaluationRespPK= plotEvaluation[["design1"]][["20mg Arm"]][["RespPK"]]plotOutcomesEvaluationRespPD= plotEvaluation[["design1"]][["20mg Arm"]][["RespPD"]]plotSensitivityIndice_RespPK_Cl= plotSensitivityIndices[["design1"]][["20mg Arm"]][["RespPK"]][["Cl"]]evaluationInd=Evaluation(name =" ",modelEquations = modelEquations,modelParameters = modelParameters,modelError = modelError,outputs =list("RespPK"="Cc","RespPD"="E" ),designs =list( design1 ),fimType ="individual",odeSolverParameters =list(atol =1e-8,rtol =1e-8 ) )evaluationInd=run( evaluationInd )evaluationBay=Evaluation(name =" ",modelEquations = modelEquations,modelParameters = modelParameters,modelError = modelError,outputs =list("RespPK"="Cc","RespPD"="E" ),designs =list( design1 ),fimType ="Bayesian",odeSolverParameters =list(atol =1e-8,rtol =1e-8 ) )evaluationBay=run( evaluationBay )show( evaluationInd )show( evaluationBay )fisherMatrix=getFisherMatrix( evaluationInd )getCorrelationMatrix( evaluationInd )getSE( evaluationInd )getRSE( evaluationInd )getShrinkage( evaluationInd )getDeterminant( evaluationInd )getDcriterion( evaluationInd )fisherMatrix=getFisherMatrix( evaluationBay )getCorrelationMatrix( evaluationBay )getSE( evaluationBay )getRSE( evaluationBay )getShrinkage( evaluationBay )getDeterminant( evaluationBay )getDcriterion( evaluationBay )We create sampling times that will be used in the initial design forcomparison 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 =4 )samplingConstraintsRespPD=SamplingTimeConstraints(outcome ="RespPD",initialSamplings =c(0.25,0.75,1.5,2,3,6,8,12 ),fixedTimes =c(2,6 ),numberOfsamplingsOptimisable =4 )armConstraint=Arm(name ="armConstraint",size =30,administrations =list( administrationRespPK ),samplingTimes =list( samplingTimesRespPK, samplingTimesRespPD ),administrationsConstraints =list( administrationConstraintsRespK ),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 ),fimType ="population",outputs =list("RespPK"="Cc","RespPD"="E" ),odeSolverParameters =list(atol =1e-8,rtol =1e-8 ) )optimizationFWPopFIM=run( optimizationFWPopFIM )saveRDS( optimizationFWPopFIM,paste0( outputPath,"optimizationFWPopFIM.RDS" ) )show( optimizationFWPopFIM )fisherMatrix=getFisherMatrix( optimizationFWPopFIM )getCorrelationMatrix( optimizationFWPopFIM )getSE( optimizationFWPopFIM )getRSE( optimizationFWPopFIM )getShrinkage( optimizationFWPopFIM )getDeterminant( optimizationFWPopFIM )getDcriterion( optimizationFWPopFIM )# plot the frequenciesplotFrequencies=plotFrequencies( optimizationFWPopFIM )plotFrequenciesoptimizationMultPopFIM=Optimization(name ="PKPD_ODE_multi_doses_populationFIM",modelEquations = modelEquations,modelParameters = modelParameters,modelError = modelError,optimizer ="MultiplicativeAlgorithm",optimizerParameters =list(lambda =0.99,numberOfIterations =1000,weightThreshold =0.01,delta =1e-04,showProcess = T ),designs =list( designConstraint ),fimType ="population",outputs =list("RespPK"="Cc","RespPD"="E" ),odeSolverParameters =list(atol =1e-8,rtol =1e-8 ) )show( optimizationMultPopFIM )fisherMatrix=getFisherMatrix( optimizationMultPopFIM )getCorrelationMatrix( optimizationMultPopFIM )getSE( optimizationMultPopFIM )getRSE( optimizationMultPopFIM )getShrinkage( optimizationMultPopFIM )getDeterminant( optimizationMultPopFIM )getDcriterion( optimizationMultPopFIM )# plot the weightplotWeights=plotWeights( optimizationMultPopFIM )plotWeights