# Handling dv at time 0

**URL:** https://discourse.pumas.ai/t/handling-dv-at-time-0/1000
**Category:** Data read
**Created:** [March 15, 2024, 4:33pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000 "2024-03-15T16:33:32Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![JinQue](https://avatars.discourse-cdn.com/v4/letter/j/45deac/32.png) [@JinQue](https://discourse.pumas.ai/u/JinQue)
#### Post date: [March 15, 2024, 4:33pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/1 "2024-03-15T16:33:32Z")

</div>

When I convert with read\_pumas and check the dataframe, the dv row comes always above the evid. I tried to convert back to df and sort the time and rerun the read\_pumas but still having the same output.

A couple of work arounds:

1. Remove observation at time 0
2. Change time to 1e-5

Any suggestions for adding DV at time 0?

```auto
julia> dataset
162×8 DataFrame
 Row │ id amt time dv mdv cmt DOSE evid
     │ String Int64 Float64 Float64? Int64 Int64 Int64 Int64
─────┼──────────────────────────────────────────────────────────────────
   1 │ 1 81 0.0 missing 1 1 81 1
   2 │ 1 0 0.0 0.0 0 2 81 0
   3 │ 1 0 0.5 0.4368 0 2 81 0
   4 │ 1 0 1.0 0.8433 0 2 81 0

```

DataFrame(population)

```auto
162×13 DataFrame
 Row │ id time evid dv amt cmt rate duration ss ii route tad dosenum
     │ String Float64 Int64 Float64? Float64? Int64? Float64? Float64? Int8 Float64? NCA.Route? Float64 Int64
─────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1 │ 1 0.0 0 0.0 0.0 missing 0.0 0.0 0 0.0 NullRoute 0.0 1
   2 │ 1 0.0 1 missing 81.0 1 0.0 0.0 0 0.0 NullRoute 0.0 1
   3 │ 1 0.5 0 0.4368 0.0 missing 0.0 0.0 0 0.0 NullRoute 0.5 1

```

---

<div class="post-metadata">

### Author: ![mohamed82008](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/mohamed82008/32/127_2.png) [@mohamed82008](https://discourse.pumas.ai/u/mohamed82008)
#### Post date: [May 10, 2024, 5:21am UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/2 "2024-05-10T05:21:11Z")

</div>

The question is not clear. Why is the order of rows important if they are at the same time point? If the order is important, using different time values by adding a small offset to one of the rows is the recommended way of handling this.

---

<div class="post-metadata">

### Author: ![JinQue](https://avatars.discourse-cdn.com/v4/letter/j/45deac/32.png) [@JinQue](https://discourse.pumas.ai/u/JinQue)
#### Post date: [May 10, 2024, 1:55pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/3 "2024-05-10T13:55:20Z")

</div>

Thanks for the input.  
I always see EVID = 1 row is behind the EVID = 0 at the same time point when using _read\_pumas_ function (see figure #2) and it is causing an error when using _fit_. I was wondering how others are handling in this case, or I should bring up as a potential bug.

---

<div class="post-metadata">

### Author: ![patrick](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/patrick/32/206_2.png) [@patrick](https://discourse.pumas.ai/u/patrick)
#### Post date: [May 10, 2024, 7:57pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/4 "2024-05-10T19:57:38Z")

</div>

Can you please show the fit error stack traces then? Because it should not matter if the evid==1 or observation (evid==0) comes first.

---

<div class="post-metadata">

### Author: ![JinQue](https://avatars.discourse-cdn.com/v4/letter/j/45deac/32.png) [@JinQue](https://discourse.pumas.ai/u/JinQue)
#### Post date: [May 10, 2024, 8:20pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/5 "2024-05-10T20:20:21Z")

</div>

Confirming that evid = 1 row is later than evid = 0, I face error I run _fit_.  
I had no problem with nonmem when using the same dataset.

Interestingly, I got the same parameter values both in pumas and nonmem when I removed time = 0 row.

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/pumas/original/1X/e714b65052f4fdfe6e9e2859495a8eb0b39bbdb8.png)

Full error message:

```auto
[ Info: Checking the initial parameter values.
ERROR: DomainError with Inf:
The initial parameter values cause a negative log likelihood of Inf. This can be due to model mis-specification or bad initial parameter values.
Stacktrace:
 [1] _optim_check_initial_values(costf::Pumas.var"#628#632"{PumasModel{(ka = 1, TVV = 1, TVCL = 1, Ω = 2, σ_prop = 1), 2, (:Depot, :TRANS1, :TRANS2, :Central), ParamSet{NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#27#32", var"#28#33", Nothing, var"#29#34", Pumas.LinearODE, var"#30#35", var"#31#36", ModelingToolkit.ODESystem}, Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, FOCE, EnsembleThreads, NamedTuple{(), Tuple{}}, TransformVariables.TransformTuple{NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{TransformVariables.ShiftedExp{true, Float64}, TransformVariables.ShiftedExp{true, Float64}, TransformVariables.ShiftedExp{true, Float64}, Pumas.PDiagTransform, TransformVariables.ShiftedExp{true, Float64}}}}, Vector{Vector{Float64}}, Vector{Vector{Float64}}, Vector{Float64}}, vparam::Vector{Float64}, verbose::Bool)
   @ Pumas /Users/runner/work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/VyE8h/src/estimation/likelihoods.jl:4026
 [2] _fit(m::PumasModel{(ka = 1, TVV = 1, TVCL = 1, Ω = 2, σ_prop = 1), 2, (:Depot, :TRANS1, :TRANS2, :Central), ParamSet{NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#27#32", var"#28#33", Nothing, var"#29#34", Pumas.LinearODE, var"#30#35", var"#31#36", ModelingToolkit.ODESystem}, population::Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, param::NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{Float64, Float64, Float64, Diagonal{Float64, Vector{Float64}}, Float64}}, approx::FOCE, ensemblealg::EnsembleThreads, optimize_fn::Pumas.DefaultOptimizeFN{Optim.BFGS{LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, Nothing, Float64, Optim.Flat}, NamedTuple{(:show_trace, :store_trace, :extended_trace, :g_tol, :allow_f_increases), Tuple{Bool, Bool, Bool, Float64, Bool}}}, fixedparamset::ParamSet{NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, fixedparam::NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{Float64, Float64, Float64, Diagonal{Float64, Vector{Float64}}, Float64}}, checkidentification::Bool, diffeq_options::NamedTuple{(), Tuple{}}, init_vrandeffsorth::Vector{Vector{Float64}}, verbose::Bool, optim_state::Nothing)
   @ Pumas /Users/runner/work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/VyE8h/src/estimation/likelihoods.jl:4189
 [3] __fit
   @ /Users/runner/work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/VyE8h/src/estimation/likelihoods.jl:3943 [inlined]
 [4] __fit
   @ /Users/runner/work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/VyE8h/src/estimation/likelihoods.jl:3930 [inlined]
 [5] fit(m::PumasModel{(ka = 1, TVV = 1, TVCL = 1, Ω = 2, σ_prop = 1), 2, (:Depot, :TRANS1, :TRANS2, :Central), ParamSet{NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#27#32", var"#28#33", Nothing, var"#29#34", Pumas.LinearODE, var"#30#35", var"#31#36", ModelingToolkit.ODESystem}, _population::Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, param::NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{Float64, Float64, Float64, Diagonal{Float64, Vector{Float64}}, Float64}}, approx::FOCE; optim_alg::Nothing, optim_options::Nothing, optimize_fn::Nothing, constantcoef::NamedTuple{(), Tuple{}}, omegas::Tuple{}, ensemblealg::EnsembleThreads, checkidentification::Bool, diffeq_options::NamedTuple{(), Tuple{}}, init_randeffs::Nothing, init_vrandeffsorth::Nothing, verbose::Bool)
   @ Pumas /Users/runner/work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/VyE8h/src/estimation/likelihoods.jl:3899
 [6] fit(m::PumasModel{(ka = 1, TVV = 1, TVCL = 1, Ω = 2, σ_prop = 1), 2, (:Depot, :TRANS1, :TRANS2, :Central), ParamSet{NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}, PDiagDomain{PDMats.PDiagMat{Float64, Vector{Float64}}}, RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#27#32", var"#28#33", Nothing, var"#29#34", Pumas.LinearODE, var"#30#35", var"#31#36", ModelingToolkit.ODESystem}, _population::Vector{Subject{NamedTuple{(:DV,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, param::NamedTuple{(:ka, :TVV, :TVCL, :Ω, :σ_prop), Tuple{Float64, Float64, Float64, Diagonal{Float64, Vector{Float64}}, Float64}}, approx::FOCE)
   @ Pumas /Users/runner/work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/VyE8h/src/estimation/likelihoods.jl:3842
 [7] top-level scope
   @ ~/Library/CloudStorage/OneDrive-TheOhioStateUniversity/Desktop/PMx_workspace/Aspirin/design_optimization/transit_iiv_V_CL/aspirin_model_param_eta_v_cl.jl:127
```

---

<div class="post-metadata">

### Author: ![patrick](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.pumas.ai/patrick/32/206_2.png) [@patrick](https://discourse.pumas.ai/u/patrick)
#### Post date: [May 13, 2024, 1:23pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/6 "2024-05-13T13:23:06Z")

</div>

NONMEM is ignoring your observation that violates the statistical assumption. The problem here is not that you have evid=0 and evid=1 at the same time, the problem is that you have a DV of 0 at time 0 and a dose at time 0 as well as a Proportional error model. If your sample is correct, your dosing time is incorrect in my opinion.

---

<div class="post-metadata">

### Author: ![JinQue](https://avatars.discourse-cdn.com/v4/letter/j/45deac/32.png) [@JinQue](https://discourse.pumas.ai/u/JinQue)
#### Post date: [May 14, 2024, 4:42pm UTC](https://discourse.pumas.ai/t/handling-dv-at-time-0/1000/7 "2024-05-14T16:42:47Z")

</div>

Thank you for pointing it out. I will try to go back and review with my colleagues
