Simobstte error

Hi - I am trying to simulate a simple time to event model, but I am getting an error that I cannot read. Could someone please help me resolve this? I am using Pumas Desktop v2.0.3.
Thanks!

Code:

ttd_exp_model = @model begin
    @param begin
        λ₁ ∈ RealDomain(lower=0)
    end
    @pre begin
        λ  = λ₁
    end
    @dynamics begin
        Λ'  = λ
    end
    @derived begin
        DROPPED ~ @. TimeToEvent(λ, Λ)
    end
end

z = Pumas.simobstte(
        ttd_exp_model,
        Subject(id = 1, observations = (DROPPED = nothing,),), 
        (λ₁ = 0.01,), maxT = 8, nT = 100)

Error:

ERROR: MethodError: no method matching _problem(::ODEProblem{Nothing, Tuple{Nothing, Nothing}, false, Nothing, ODEFunction{false, ModelingToolkit.ODEFunctionClosure{var"#522#534", var"#523#535"}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::LabelledArrays.SLArray{Tuple{1}, Float64, 1, 1, (:Λ,)}, ::Tuple{Float64, Int64}, ::Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}, ::Pumas.Pre{Nothing, var"#518#530"{NamedTuple{(:λ₁,), Tuple{Float64}}, NamedTuple{(), Tuple{}}, Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}}}, ::Pumas.Pre{Nothing, var"#520#532"{NamedTuple{(:λ₁,), Tuple{Float64}}, NamedTuple{(), Tuple{}}, Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}}}; diffeq_options=(callback = nothing, continuity = :right, saveat = 0.0:0.08080808080808081:8.0, tspan = (0.0, 8)))
Closest candidates are:
  _problem(::SciMLBase.DEProblem, ::AbstractVector{T} where T, ::Tuple{T, T} where T, ::Pumas.AbstractSubject, ::Any, ::Any; diffeq_options) at C:\Users\julia\.julia\packages\Pumas\HDuXQ\src\simulate_methods\diffeqs.jl:1
  _problem(::Pumas.ExplicitModel, ::AbstractVector{T} where T, ::Tuple{T, T} where T, ::Pumas.AbstractSubject, ::Any, ::Any; diffeq_options) at C:\Users\julia\.julia\packages\Pumas\HDuXQ\src\simulate_methods\analytical.jl:33
  _problem(::AnalyticalPKProblem, ::AbstractVector{T} where T, ::Tuple{T, T} where T, ::Pumas.AbstractSubject, ::Any, ::Any; diffeq_options) at C:\Users\julia\.julia\packages\Pumas\HDuXQ\src\simulate_methods\analytical.jl:35
  ...
Stacktrace:
 [1] _problem(model::PumasModel{ParamSet{NamedTuple{(:λ₁,), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#516#528", var"#517#529", var"#519#531", var"#521#533", ODEProblem{Nothing, Tuple{Nothing, Nothing}, false, Nothing, ODEFunction{false, ModelingToolkit.ODEFunctionClosure{var"#522#534", var"#523#535"}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, 
SciMLBase.StandardODEProblem}, var"#524#536", var"#526#538", ModelingToolkit.ODESystem}, subject::Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}, col::Pumas.Pre{Nothing, var"#518#530"{NamedTuple{(:λ₁,), Tuple{Float64}}, NamedTuple{(), Tuple{}}, Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}}}, dcp::Pumas.Pre{Nothing, var"#520#532"{NamedTuple{(:λ₁,), Tuple{Float64}}, NamedTuple{(), Tuple{}}, Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}}}; diffeq_options::NamedTuple{(:callback, :continuity, :saveat, :tspan), Tuple{Nothing, Symbol, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Tuple{Float64, Int64}}})
   @ Pumas C:\Users\julia\.julia\packages\Pumas\HDuXQ\src\models\model_api.jl:807
 [2] simobs(::PumasModel{ParamSet{NamedTuple{(:λ₁,), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#516#528", var"#517#529", var"#519#531", var"#521#533", ODEProblem{Nothing, Tuple{Nothing, Nothing}, false, Nothing, ODEFunction{false, ModelingToolkit.ODEFunctionClosure{var"#522#534", var"#523#535"}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, var"#524#536", var"#526#538", ModelingToolkit.ODESystem}, ::Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}, ::NamedTuple{(:λ₁,), Tuple{Float64}}, ::Nothing; obstimes::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, ensemblealg::EnsembleSerial, diffeq_options::NamedTuple{(:tspan,), Tuple{Tuple{Float64, Int64}}}, rng::MersenneTwister)
   @ Pumas C:\Users\julia\.julia\packages\Pumas\HDuXQ\src\models\model_api.jl:1073
 [3] simobstte(model::PumasModel{ParamSet{NamedTuple{(:λ₁,), Tuple{RealDomain{Int64, TransformVariables.Infinity{true}, Int64}}}}, var"#516#528", var"#517#529", var"#519#531", var"#521#533", ODEProblem{Nothing, Tuple{Nothing, Nothing}, false, Nothing, ODEFunction{false, ModelingToolkit.ODEFunctionClosure{var"#522#534", var"#523#535"}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, var"#524#536", var"#526#538", ModelingToolkit.ODESystem}, subject::Subject{NamedTuple{(:DROPPED,), Tuple{Nothing}}, Pumas.ConstantCovar{NamedTuple{(), Tuple{}}}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Nothing}, param::NamedTuple{(:λ₁,), Tuple{Float64}}, randeffs::Nothing; minT::Float64, maxT::Int64, nT::Int64, repeated::Bool, rng::MersenneTwister, diffeq_options::NamedTuple{(), Tuple{}})
   @ Pumas C:\Users\julia\.julia\packages\Pumas\HDuXQ\src\estimation\likelihoods.jl:221

Hello Rahul,

Unfortunately, the simobstte function is a bit picky about the input types. We’ll loosen that in the future but for now, you’d have to pass maxT as a float, i.e. maxT = 8.0 instead of just 8.

Please also notice that nT = 100 is probably way larger than needed. I’d say that generally, you shouldn’t set nT. In contrast to how you’d simulate TTE models in NONMEM, we construct a smooth survival probability curve then use root finding to find the time of the event.

1 Like

That seems to have worked. Thank you!