Domain Error Message

While trying a 2Comparamental Pumas model, I am running into the problems with the error message:

“DomainError with -5.8849501006116275e-6:

sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x))………”

The data has been read through read_pumas; Pumas. FOCEI () was run but at the level of standard error calculations, I get the Domain Error message.

Any thoughts?

Thanks

Dear Anitha,

Welcome to the community!

Could you please share the code you are working on here. What error model are you working with?

Vijay

Thank you Vijay. Below is the code. I am using additive error model.

pkdf = read_pumas(df_sorted,
                    cvs     =   [:Age,:BSA],
                    dvs     =   [:Conc],
                    id      =   :Patient,
                    time    =   :Time,
                    evid    =   :evid,
                    amt     =   :amt,
                    rate    =   :rate)
######################## Base model ############################################
two_cmpt_add = @model begin
  @param   begin
      tvcl     ∈    RealDomain(lower=0)
      tvQ      ∈    RealDomain(lower=0)
      tvv      ∈    RealDomain(lower=0)
      tvvt     ∈    RealDomain(lower=0)
      Ω        ∈    PDiagDomain(4)
      σ²_add   ∈    RealDomain(lower=0.0001) 

  end
  @random begin
      η       ~     MvNormal(Ω)
  end
  @pre begin
      CL      =     tvcl  * exp(η[1])
      Q       =     tvQ   * exp(η[2])
      Vc      =     tvv   * exp(η[3])
      Vp      =     tvvt  * exp(η[4])
  end
  @dynamics Central1Periph1
  @derived begin
      Cparent        =      @. Central / Vc 
      Conc         ~      @. Normal(Cparent, sqrt(σ²_add)) 
    end
end
#Initial parameters
param = (
    tvcl     =     55,
    tvQ      =     11,
    tvv      =     9,
    tvvt     =     10,
    Ω        =     Diagonal([0.09,0.09,0.09,0.09]),
    σ²_add   =     2,
    )
#fit model
result_two_cmpt_add = @time fit(
                                two_cmpt_add,
                                pkdf,param,
                                Pumas.FOCEI())
#standard error calculation
infer_two_cmpt_add = infer(result_two_cmpt_add) ( DomainError with -5.88495e-6:)
DomainError with -5.8849501006116275e-6:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
throw_complex_domainerror(::Symbol, ::Float64) at math.jl:31
sqrt at math.jl:493 [inlined]
_broadcast_getindex_evalf at broadcast.jl:625 [inlined]
_broadcast_getindex at broadcast.jl:598 [inlined]
_getindex at broadcast.jl:621 [inlined]
_broadcast_getindex at broadcast.jl:597 [inlined]
getindex at broadcast.jl:558 [inlined]
macro expansion at broadcast.jl:888 [inlined]
macro expansion at simdloop.jl:77 [inlined]
copyto! at broadcast.jl:887 [inlined]
copyto! at broadcast.jl:842 [inlined]
copy at broadcast.jl:818 [inlined]
materialize at broadcast.jl:798 [inlined]
unwhiten(::PDMats.PDiagMat{Float64,Array{Float64,1}}, ::SubArray{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Pumas, Symbol("##190#191")){Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{,Tuple{}}},PumasModel{ParamSet{NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},PDiagDomain{PDMats.PDiagMat{Float64,Array{Float64,1}}},RealDomain{Float64,TransformVariables.Infinity{true},Float64}}}},getfield(Main, Symbol("##9#14")),getfield(Main, Symbol("##10#15")),getfield(Main, Symbol("##11#16")),Central1Periph1,getfield(Main, Symbol("##12#17")),getfield(Main, Symbol("##13#18"))},Subject{NamedTuple{(:Conc_B,),Tuple{Array{Union{Missing, Float64},1}}},NamedTuple{(:Age, :BSA),Tuple{Float64,Float64}},Array{Pumas.Event{Float64,Float64,Float64,Float64,Float64,Float64,Int64},1},Array{Float64,1}},NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{Float64,Float64,Float64,Float64,PDMats.PDiagMat{Float64,Array{Float64,1}},Float64}},Tuple{}},Float64},Float64,4},1,Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Pumas, Symbol("##190#191")){Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{,Tuple{}}},PumasModel{ParamSet{NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},PDiagDomain{PDMats.PDiagMat{Float64,Array{Float64,1}}},RealDomain{Float64,TransformVariables.Infinity{true},Float64}}}},getfield(Main, Symbol("##9#14")),getfield(Main, Symbol("##10#15")),getfield(Main, Symbol("##11#16")),Central1Periph1,getfield(Main, Symbol("##12#17")),getfield(Main, Symbol("##13#18"))},Subject{NamedTuple{(:Conc_B,),Tuple{Array{Union{Missing, Float64},1}}},NamedTuple{(:Age, :BSA),Tuple{Float64,Float64}},Array{Pumas.Event{Float64,Float64,Float64,Float64,Float64,Float64,Int64},1},Array{Float64,1}},NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{Float64,Float64,Float64,Float64,PDMats.PDiagMat{Float64,Array{Float64,1}},Float64}},Tuple{}},Float64},Float64,4},1},Tuple{UnitRange{Int64}},true}) at likelihoods.jl:2
transform_with at transforms.jl:295 [inlined]
_transform_tuple at aggregation.jl:161 [inlined]
transform_tuple at aggregation.jl:171 [inlined]
transform_with at aggregation.jl:223 [inlined]
transform(::TransformVariables.TransformTuple{NamedTuple{(:η,),Tuple{Pumas.MvNormalTransform{MvNormal{Float64,PDMats.PDiagMat{Float64,Array{Float64,1}},FillArrays.Zeros{Float64,1,Tuple{Base.OneTo{Int64}}}}}}}}, ::Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(Pumas, Symbol("##190#191")){Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{,Tuple{}}},PumasModel{ParamSet{NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infinity{true},Float64},PDiagDomain{PDMats.PDiagMat{Float64,Array{Float64,1}}},RealDomain{Float64,TransformVariables.Infinity{true},Float64}}}},getfield(Main, Symbol("##9#14")),getfield(Main, Symbol("##10#15")),getfield(Main, Symbol("##11#16")),Central1Periph1,getfield(Main, Symbol("##12#17")),getfield(Main, Symbol("##13#18"))},Subject{NamedTuple{(:Conc_B,),Tuple{Array{Union{Missing, Float64},1}}},NamedTuple{(:Age, :BSA),Tuple{Float64,Float64}},Array{Pumas.Event{Float64,Float64,Float64,Float64,Float64,Float64,Int64},1},Array{Float64,1}},NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{Float64,Float64,Float64,Float64,PDMats.PDiagMat{Float64,Array{Float64,1}},Float64}},Tuple{}},Float64},Float64,4},1}) at generic.jl:196
(::getfield(Pumas, Symbol("##190#191")){Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{,Tuple{}}},PumasModel{ParamSet{NamedTuple{(:tvcl, :tvQ, :tvv, :tvvt, :Ω, :σ²_add),Tuple{RealDomain{Int64,TransformVariables.Infinity{true},Float64},RealDomain{Int64,TransformVariables.Infi...

So you are getting an error when you run the infer step and not during the fit process, correct?

Yes, that’s correct.

This can happen when some of the variance estimates are very close to zero. Eventually, this will produce a more informative error message or we might be able to avoid the failing computation completely. Would you be able to share the output from the fitted model before running infer?

Ok, Now i see. The Estimates are close to zero and very different from initial estimates. Can you suggest me how to share the output?

Thanks Andreas. I fixed the error - model is good now.

If you just type

julia> result_two_cmpt_add

and hit enter then you should get a summary table with the coefficients.

Thank you, was able to get the output.