Prediction corrected VPC error

Hello,
I am trying to use prediction_correction = true inside the vpc function as follows:

PD_vpc = vpc(fit_pacli_carb_ANC, 200; observations = [:ANC],
             stratify_by = [:Regimen],prediction_correction = true, 
             ensemblealg=EnsembleThreads())

but I am getting the following error

[ Info: Continuous VPC
ERROR: BoundsError: attempt to access 4-element Vector{Union{Missing, Float64}} at index [0]
Stacktrace:
  [1] getindex(A::Vector{Union{Missing, Float64}}, i1::Int64)
    @ Base ./array.jl:861
  [2] (::Pumas.var"#45#47"{Vector{Float64}})(t::Float64)
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/data_parsing/io.jl:1172
  [3] narrowing_map(f::Function, args::Vector{Float64})
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/simulate_methods/utils.jl:353
  [4] DataFrame(subject::Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}; include_covariates::Bool, include_observations::Bool, include_events::Bool, extra_time::Vector{Float64})
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/data_parsing/io.jl:1167
  [5] DataFrame(pred::Pumas.SubjectPrediction{NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, Vector{Float64}, Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}; include_covariates::Bool, include_observations::Bool, include_events::Bool)
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/estimation/diagnostics.jl:229
  [6] (::Base.Broadcast.var"#41#42"{Base.Pairs{Symbol, Bool, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:include_covariates, :include_observations, :include_events), Tuple{Bool, Bool, Bool}}}, DataType})(args::Pumas.SubjectPrediction{NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, Vector{Float64}, Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}})
    @ Base.Broadcast ./broadcast.jl:1283
  [7] _broadcast_getindex_evalf
    @ ./broadcast.jl:670 [inlined]
  [8] _broadcast_getindex
    @ ./broadcast.jl:643 [inlined]
  [9] getindex
    @ ./broadcast.jl:597 [inlined]
 [10] copyto_nonleaf!(dest::Vector{DataFrame}, bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Tuple{Base.OneTo{Int64}}, Base.Broadcast.var"#41#42"{Base.Pairs{Symbol, Bool, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:include_covariates, :include_observations, :include_events), Tuple{Bool, Bool, Bool}}}, DataType}, Tuple{Base.Broadcast.Extruded{Vector{Pumas.SubjectPrediction{NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, Vector{Float64}, Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}}, Tuple{Bool}, Tuple{Int64}}}}, iter::Base.OneTo{Int64}, state::Int64, count::Int64)
    @ Base.Broadcast ./broadcast.jl:1055
 [11] copy
    @ ./broadcast.jl:907 [inlined]
 [12] materialize
    @ ./broadcast.jl:860 [inlined]
 [13] DataFrame(vpred::Vector{Pumas.SubjectPrediction{NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, Vector{Float64}, Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}}; include_covariates::Bool, include_observations::Bool, include_events::Bool)
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/estimation/diagnostics.jl:272
 [14] DataFrame(vpred::Vector{Pumas.SubjectPrediction{NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, NamedTuple{(:CONC, :conc, :E, :ANC, :EDRUG, :EDRUGC, :FEED), NTuple{7, Vector{Float64}}}, Vector{Float64}, Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}})

The function works if I remover the prediction correction argument.
Any idea how to fix this error ? thanks

@ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/estimation/diagnostics.jl:272
 [15] vpc(model::PumasModel{(tvPOP_CIRC0 = 1, tvPOP_MTT = 1, tvPOP_GAMMA = 1, tvPOP_SLOP = 1, tvPOP_SLOPC = 1, Ω_1 = 3, Ω_2 = 1, σ_prop = 1), 4, (:Central, :PERIPH1, :PERIPH2, :central_carb, :Periph_carb, :Prol, :Transit1, :Transit2, :Transit3, :Circ), ParamSet{NamedTuple{(:tvPOP_CIRC0, :tvPOP_MTT, :tvPOP_GAMMA, :tvPOP_SLOP, :tvPOP_SLOPC, :Ω_1, :Ω_2, :σ_prop), Tuple{RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}, Serialization.__deserialized_types__.var"##425", Pumas.TimeDispatcher{Serialization.__deserialized_types__.var"##426", Serialization.__deserialized_types__.var"##427"}, Nothing, Serialization.__deserialized_types__.var"##429", ODEProblem{Nothing, Tuple{Nothing, Nothing}, true, Nothing, ODEFunction{true, ModelingToolkit.ODEFunctionClosure{Serialization.__deserialized_types__.var"##430", Serialization.__deserialized_types__.var"##431"}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Serialization.__deserialized_types__.var"##432", Serialization.__deserialized_types__.var"##433", ModelingToolkit.ODESystem}, _population::Vector{Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, param::NamedTuple{(:tvPOP_CIRC0, :tvPOP_MTT, :tvPOP_GAMMA, :tvPOP_SLOP, :tvPOP_SLOPC, :Ω_1, :Ω_2, :σ_prop), Tuple{Float64, Float64, Float64, Float64, Float64, PDMats.PDiagMat{Float64, Vector{Float64}}, PDMats.PDiagMat{Float64, Vector{Float64}}, Float64}}; samples::Int64, qreg_method::QuantileRegressions.IP, observations::Vector{Symbol}, stratify_by::Vector{Symbol}, quantiles::Tuple{Float64, Float64, Float64}, level::Float64, ensemblealg::EnsembleThreads, bandwidth::Nothing, maxnumstrats::Vector{Int64}, covariates::Vector{Symbol}, smooth::Bool, rng::TaskLocalRNG, obstimes::Vector{Any}, diffeq_options::NamedTuple{(), Tuple{}}, prediction_correction::Bool)
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/estimation/vpc.jl:1116
 [16] vpc(fpm::Pumas.FittedPumasModel{PumasModel{(tvPOP_CIRC0 = 1, tvPOP_MTT = 1, tvPOP_GAMMA = 1, tvPOP_SLOP = 1, tvPOP_SLOPC = 1, Ω_1 = 3, Ω_2 = 1, σ_prop = 1), 4, (:Central, :PERIPH1, :PERIPH2, :central_carb, :Periph_carb, :Prol, :Transit1, :Transit2, :Transit3, :Circ), ParamSet{NamedTuple{(:tvPOP_CIRC0, :tvPOP_MTT, :tvPOP_GAMMA, :tvPOP_SLOP, :tvPOP_SLOPC, :Ω_1, :Ω_2, :σ_prop), Tuple{RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}, Serialization.__deserialized_types__.var"##425", Pumas.TimeDispatcher{Serialization.__deserialized_types__.var"##426", Serialization.__deserialized_types__.var"##427"}, Nothing, Serialization.__deserialized_types__.var"##429", ODEProblem{Nothing, Tuple{Nothing, Nothing}, true, Nothing, ODEFunction{true, ModelingToolkit.ODEFunctionClosure{Serialization.__deserialized_types__.var"##430", Serialization.__deserialized_types__.var"##431"}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Serialization.__deserialized_types__.var"##432", Serialization.__deserialized_types__.var"##433", ModelingToolkit.ODESystem}, Vector{Subject{NamedTuple{(:ANC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:BSA, :BILIRUBIN, :SEX, :AGE, :Regimen), Tuple{Float64, Float64, Int64, Int64, String}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, Optim.MultivariateOptimizationResults{Optim.BFGS{LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, Nothing, Float64, Optim.Flat}, Vector{Float64}, Float64, Float64, Vector{Optim.OptimizationState{Float64, Optim.BFGS{LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, Nothing, Float64, Optim.Flat}}}, Bool, NamedTuple{(:f_limit_reached, :g_limit_reached, :h_limit_reached, :time_limit, :callback, :f_increased), NTuple{6, Bool}}}, Pumas.FOCE, Vector{Vector{Float64}}, NamedTuple{(:optimize_fn, :constantcoef, :omegas, :ensemblealg, :diffeq_options), Tuple{Pumas.DefaultOptimizeFN{Nothing, NamedTuple{(:show_trace, :store_trace, :extended_trace, :g_tol, :allow_f_increases), Tuple{Bool, Bool, Bool, Float64, Bool}}}, NamedTuple{(), Tuple{}}, Tuple{}, EnsembleThreads, NamedTuple{(), Tuple{}}}}, ParamSet{NamedTuple{(:tvPOP_CIRC0, :tvPOP_MTT, :tvPOP_GAMMA, :tvPOP_SLOP, :tvPOP_SLOPC, :Ω_1, :Ω_2, :σ_prop), Tuple{RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}}; samples::Int64, qreg_method::QuantileRegressions.IP, observations::Vector{Symbol}, stratify_by::Vector{Symbol}, quantiles::Tuple{Float64, Float64, Float64}, level::Float64, ensemblealg::EnsembleThreads, bandwidth::Nothing, maxnumstrats::Vector{Int64}, covariates::Vector{Symbol}, smooth::Bool, rng::TaskLocalRNG, obstimes::Vector{Any}, prediction_correction::Bool)
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/estimation/vpc.jl:1445
 [17] #vpc#1318
    @ /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/MxXdQ/src/estimation/vpc.jl:1503 [inlined]
 [18] top-level scope
    @ ~/data/code/TaxaneFinal/Friburg_updated_clean.jmd:4426

similarly when I use predict function I get the above error

mdl_pred = predict(fit_pacli_carb_ANC,obstimes = 0:1:1000)

but if I removed the obstimes = 0:1:1000 argument, the function works fine

@ahmed.salem is this in Pumas version 2.2? Are you on umb.juliahub.com ?

Yeah this is v2.2. in umb.juliahub.com.

We have fixed some issues with the prediction corrected VPCs in version 2.3 so there is good chance that the issue is gone once the new version becomes available. Please let us know once you get a chance to test it.

1 Like