# Model with mixed zero and first order absorption and lag time

**URL:** https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697
**Category:** Basic Usage
**Created:** [June 7, 2022, 6:18pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697 "2022-06-07T18:18:24Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Sweilem](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/sweilem/32/285_2.png) [@Sweilem](https://discourse.pumas.ai/u/Sweilem)
#### Post date: [June 7, 2022, 6:18pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/1 "2022-06-07T18:18:24Z")

</div>

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**

```auto
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:

```

---

<div class="post-metadata">

### Author: ![andreasnoack](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/andreasnoack/32/22_2.png) [@andreasnoack](https://discourse.pumas.ai/u/andreasnoack)
#### Post date: [June 7, 2022, 7:52pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/2 "2022-06-07T19:52:56Z")

</div>

Hello Sweilem

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

Andreas

---

<div class="post-metadata">

### Author: ![Sweilem](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/sweilem/32/285_2.png) [@Sweilem](https://discourse.pumas.ai/u/Sweilem)
#### Post date: [June 7, 2022, 8:15pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/3 "2022-06-07T20:15:45Z")

</div>

> [@andreasnoack](#):
>
> stacktrace

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

```auto
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

```

---

<div class="post-metadata">

### Author: ![andreasnoack](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/andreasnoack/32/22_2.png) [@andreasnoack](https://discourse.pumas.ai/u/andreasnoack)
#### Post date: [June 7, 2022, 8:36pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/4 "2022-06-07T20:36:40Z")

</div>

How does you `@dosecontrol` block look like?

---

<div class="post-metadata">

### Author: ![Sweilem](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/sweilem/32/285_2.png) [@Sweilem](https://discourse.pumas.ai/u/Sweilem)
#### Post date: [June 7, 2022, 8:48pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/5 "2022-06-07T20:48:38Z")

</div>

Here is the model I have so far:

````auto
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```
````

---

<div class="post-metadata">

### Author: ![andreasnoack](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/andreasnoack/32/22_2.png) [@andreasnoack](https://discourse.pumas.ai/u/andreasnoack)
#### Post date: [June 7, 2022, 9:24pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/6 "2022-06-07T21:24:09Z")

</div>

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](mailto:notifications@pumas.discoursemail.com)\>:

---

<div class="post-metadata">

### Author: ![Sweilem](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/sweilem/32/285_2.png) [@Sweilem](https://discourse.pumas.ai/u/Sweilem)
#### Post date: [June 7, 2022, 10:33pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/7 "2022-06-07T22:33:01Z")

</div>

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!

---

<div class="post-metadata">

### Author: ![storopoli](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/storopoli/32/190_2.png) [@storopoli](https://discourse.pumas.ai/u/storopoli)
#### Post date: [June 9, 2022, 1:30pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/8 "2022-06-09T13:30:26Z")

</div>

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
julia> x = (y = 2)
2

julia> x
2

julia> y
2

```

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

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

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

```

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

---

<div class="post-metadata">

### Author: ![Sweilem](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/sweilem/32/285_2.png) [@Sweilem](https://discourse.pumas.ai/u/Sweilem)
#### Post date: [June 11, 2022, 10:32pm UTC](https://discourse.pumas.ai/t/model-with-mixed-zero-and-first-order-absorption-and-lag-time/697/9 "2022-06-11T22:32:52Z")

</div>

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