Model with mixed zero and first order absorption and lag time

Hello, I’m working on a mixed zero and first order absorption and lag time and I added a column rate -2 for zero-order absorption at time zero to my dataset as I understood from the tutorials, I’m stuck with the following error when doing inspect

julia> inspect_model_1cmp_ZO = inspect(fit_model_1cmp_ZO)
[ Info: Calculating predictions.
[ Info: Calculating weighted residuals.
[ Info: Calculating empirical bayes.
[ Info: Evaluating individual parameters.
[ Info: Evaluating dose control parameters.
ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type Symbol
Closest candidates are:
  convert(::Type{T}, ::T) where T at /opt/julia-1.7.1/share/julia/base/essentials.jl:218
  Symbol(::Any...) at /opt/julia-1.7.1/share/julia/base/strings/basic.jl:229
Stacktrace:

Hello Sweilem

Which version of Pumas are you using and would you be able to show us the complete stacktrace?

Andreas

Hi Andreas,

I’m using Pumas IDE app on juliahub, I think this should be version 2.1 or if you can please guide me on how to get the exact version!

here is the complete stacktrace

julia> inspect_model_1cmp_ZO = inspect(fit_model_1cmp_ZO)
[ Info: Calculating predictions.
[ Info: Calculating weighted residuals.
[ Info: Calculating empirical bayes.
[ Info: Evaluating individual parameters.
[ Info: Evaluating dose control parameters.
ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type Symbol
Closest candidates are:
  convert(::Type{T}, ::T) where T at /opt/julia-1.7.1/share/julia/base/essentials.jl:218
  Symbol(::Any...) at /opt/julia-1.7.1/share/julia/base/strings/basic.jl:229
Stacktrace:
  [1] cvt1
    @ ./essentials.jl:343 [inlined]
  [2] ntuple
    @ ./ntuple.jl:49 [inlined]
  [3] convert(#unused#::Type{Tuple{Symbol, Symbol}}, x::Tuple{Symbol, Int64})
    @ Base ./essentials.jl:344
  [4] push!(a::Vector{Tuple{Symbol, Symbol}}, item::Tuple{Symbol, Int64})
    @ Base ./array.jl:994
  [5] _dcp_keys(dcp_el::NamedTuple{(:duration, :lags), Tuple{Float64, NamedTuple{(:Depot, :Central), Tuple{Float64, Float64}}}})
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/Ozwn0/src/estimation/diagnostics.jl:1464
  [6] _dosecontrol(model::PumasModel{(tvCL = 1, tvVc = 1, tvka = 1, tvdur = 1, tvlag = 1, Ω = 1, σ_prop = 1, σ_add = 1), 1, ParamSet{NamedTuple{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}, var"#43#61", var"#44#62", var"#46#64", var"#48#66", Pumas.LinearODE, var"#49#67", var"#55#73", ModelingToolkit.ODESystem}, subject::Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:IsDM, :IsPM), Tuple{String3, String3}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}, param::NamedTuple{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{Float64, Float64, Float64, Float64, Float64, PDMats.PDiagMat{Float64, Vector{Float64}}, Float64, Float64}}, vrandeffsorth::Vector{Float64})
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/Ozwn0/src/estimation/diagnostics.jl:1443
  [7] (::Pumas.var"#940#941"{Pumas.FittedPumasModel{PumasModel{(tvCL = 1, tvVc = 1, tvka = 1, tvdur = 1, tvlag = 1, Ω = 1, σ_prop = 1, σ_add = 1), 1, ParamSet{NamedTuple{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}, var"#43#61", var"#44#62", var"#46#64", var"#48#66", Pumas.LinearODE, var"#49#67", var"#55#73", ModelingToolkit.ODESystem}, Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:IsDM, :IsPM), Tuple{String3, String3}}}, 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{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}}, NamedTuple{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{Float64, Float64, Float64, Float64, Float64, PDMats.PDiagMat{Float64, Vector{Float64}}, Float64, Float64}}})(::Tuple{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:IsDM, :IsPM), Tuple{String3, String3}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}, Vector{Float64}})
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/Ozwn0/src/estimation/diagnostics.jl:1397
  [8] iterate
    @ ./generator.jl:47 [inlined]
  [9] collect
    @ ./array.jl:724 [inlined]
 [10] map
    @ ./abstractarray.jl:2878 [inlined]
 [11] dosecontrol
    @ /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/Ozwn0/src/estimation/diagnostics.jl:1396 [inlined]
 [12] inspect(fpm::Pumas.FittedPumasModel{PumasModel{(tvCL = 1, tvVc = 1, tvka = 1, tvdur = 1, tvlag = 1, Ω = 1, σ_prop = 1, σ_add = 1), 1, ParamSet{NamedTuple{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}, var"#43#61", var"#44#62", var"#46#64", var"#48#66", Pumas.LinearODE, var"#49#67", var"#55#73", ModelingToolkit.ODESystem}, Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:IsDM, :IsPM), Tuple{String3, String3}}}, 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{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}}; wres_approx::Pumas.FOCE, nsim::Int64, rng::TaskLocalRNG)
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/Ozwn0/src/estimation/diagnostics.jl:1126
 [13] inspect(fpm::Pumas.FittedPumasModel{PumasModel{(tvCL = 1, tvVc = 1, tvka = 1, tvdur = 1, tvlag = 1, Ω = 1, σ_prop = 1, σ_add = 1), 1, ParamSet{NamedTuple{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}, var"#43#61", var"#44#62", var"#46#64", var"#48#66", Pumas.LinearODE, var"#49#67", var"#55#73", ModelingToolkit.ODESystem}, Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(:IsDM, :IsPM), Tuple{String3, String3}}}, 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{(:tvCL, :tvVc, :tvka, :tvdur, :tvlag, :Ω, :σ_prop, :σ_add), Tuple{RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, RealDomain{Int64, Int64, Float64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}, RealDomain{Float64, TransformVariables.Infinity{true}, Float64}}}}})
    @ Pumas /builds/PumasAI/PumasSystemImages-jl/.julia/packages/Pumas/Ozwn0/src/estimation/diagnostics.jl:1099
 [14] top-level scope
    @ ~/data/code/Omeprazole Clinical Trial/sc/omeprazole.jl:422


How does you @dosecontrol block look like?

Here is the model I have so far:

onecmptmodel_ZOabs = @model begin

  @param begin
      
      tvCL ∈ RealDomain(lower = 0, upper = 100)
      tvVc ∈ RealDomain(lower = 0, upper = 100)
      tvka ∈ RealDomain(lower = 0, upper = 100)
      tvdur ∈ RealDomain(lower=0, upper =100)
      tvbio  ∈ RealDomain(lower = 0, upper =1)
      tvlag ∈ RealDomain(lower = 0, upper =1)
      Ω    ∈ PDiagDomain(1)
      σ_prop ∈ RealDomain(lower=0.0001)
      σ_add ∈ RealDomain(lower=0.0001)
  end

  @random begin
      η ~ MvNormal(Ω)
  end

  @covariates IsDM IsPM

  @pre begin
      
      CL=tvCL*exp(η[1])
      Vc=tvVc
      Ka = tvka

  end

  @dosecontrol begin
      duration = (Central = tvdur)
      bioav = (Depot=tvbio, Central=1.0)
      lags  = (Depot= tvlag, Central=1.0)
    end
    @dynamics begin
        Depot'   = -Ka*Depot
       Central' =  Ka*Depot - (CL/Vc)*Central
      end

  @derived begin
      cp = @. (Central/Vc)
      DV ~ @. Normal(abs(cp), abs((cp)*σ_prop) +σ_add)
  end
end```

What happens if you write duration = (Central = tvdur,) instead? (Add a trailing comma)

tir. 7. jun. 2022 kl. 22.58 skrev Sweilem Rihani via Pumas <notifications@pumas.discoursemail.com>:

Great, thank you Andreas!! I think this comma solved the error, now I need to solve the issue with NaN and Inf values that preventing inspect from running!
Thank you!

Andreas suggestions were right.
If you want to know why this happens, here is an explanation:

duration = (Central = tvdur) is a nested assignment. Something like duration equals whatever is the result of another assignment of Central equals tvdur.

This Julia snippet will make it more clear:

julia> x = (y = 2)
2

julia> x
2

julia> y
2

Now, duration = (Central = tvdur,) is a NamedTuple:

julia> x = (y = 2,)
(y = 2,)

julia> typeof(x)
NamedTuple{(:y,), Tuple{Int64}}

which is what you need to pass inside the @dosecontrol block.

This is very helpful! Thank you Jose for the calrification!!

1 Like