Ordinal regression

Hi help,

I am trying to run the example on ordinal regression from here: Ordinal Regression

When I use the manual way of writing the ordinal model using Categorical, I get the below error.

Could you please help? The model is exactly as in the tutorials.

## Manual way - Using Categorical
ordinal_model2 = @model begin
    @param begin
        α ∈ VectorDomain(; init = [0.001, 0.002, 0.003])
        βRx ∈ RealDomain()
    end

    @covariates begin
        isRx
    end

    @pre begin
        ϕ = α .- isRx * βRx

        # cut points for >= 1, >=2 and >=3
        γ = logistic.(ϕ)

        # probabilities for PainScore =1, =2, =3 and =4
        p₄ = 1.0 - γ[3]
        p₃ = γ[3] - γ[2]
        p₂ = γ[2] - γ[1]
        p₁ = γ[1]
    end

    @derived begin
        PainScore ~ @. Categorical(p₁, p₂, p₃, p₄)
    end
end
## model fit
pk_painrelief_categorical_fit = fit(
    ordinal_model2,
    pk_painrelief_pop,
    (; init_params(ordinal_model2)..., α = init_intercepts),
    NaivePooled(),
)

Thanks.

ERROR: UndefVarError: Categorical not defined in Main
Hint: It looks like two or more modules export different bindings with this name, resulting in ambiguity. Try explicitly importing it from a particular module, or qualifying the name with the module it should come from.
Hint: a global variable of this name also exists in Distributions.
Hint: a global variable of this name also exists in Pumas.
Hint: a global variable of this name also exists in Makie.
Hint: a global variable of this name also exists in CairoMakie.
Stacktrace:
[1] (::var"#22#27")(_pre::Returns{…}, _sol::Pumas.NullDESolution{…}, _t::Vector{…}, _subject::Subject{…}, _param@NamedTuple:@NamedTuple{…}, _random@NamedTuple:@NamedTuple{})
@ Main .\none:2505
[2] DerivedObj
@ .\none:2403 [inlined]
[3] #_derived#394
@ .\none:1960 [inlined]
[4] _derived
@ .\none:1904 [inlined]
[5] _conditional_nll(m::PumasModel{…}, subject::Subject{…@NamedTuple, param::@NamedTuple{…}, @NamedTupleandeffs::@NamedTuple{}; diffeq@NamedTupleoptions::@NamedTuple{…})
@ Pumas .\none:1456
[6] _conditional_nll
@ .\none:1449 [inlined]
[7] __marginal_nll
@ .\none:1833 [inlined]
[8] #_marginal_nll#559
@ .\none:1801 [inlined]
[9] _marginal_nll
@ .\none:1771 [inlined]
[10] _marginal_nll_vparam
@ .\none:3052 [inlined]
[11] FixTail
@ C:\Users\mgopalakrishnan.julia\packages\DifferentiationInterface\M8gIf\src\utils\context.jl:172 [inlined]
[12] vector_mode_dual_eval!
@ C:\Users\mgopalakrishnan.julia\packages\ForwardDiff\egQMG\src\apiutils.jl:24 [inlined]
[13] vector_mode_gradient!(result::DiffResults.MutableDiffResult{…}, f::DifferentiationInterface.FixTail{…}, x::Vector{…}, cfg::ForwardDiff.GradientConfig{…})
@ ForwardDiff C:\Users\mgopalakrishnan.julia\packages\ForwardDiff\egQMG\src\gradient.jl:105
[14] gradient!
@ C:\Users\mgopalakrishnan.julia\packages\ForwardDiff\egQMG\src\gradient.jl:39 [inlined]
[15] value_and_gradient!
@ C:\Users\mgopalakrishnan.julia\packages\DifferentiationInterface\M8gIf\ext\DifferentiationInterfaceForwardDiffExt\onearg.jl:398 [inlined]
[16] value_and_gradient!
@ C:\Users\mgopalakrishnan.julia\packages\DifferentiationInterface\M8gIf\ext\DifferentiationInterfaceForwardDiffExt\onearg.jl:305 [inlined]
[17] #_evaluate_marginal_nll_gradient!#632
@ .\none:3086 [inlined]
[18] _evaluate_marginal_nll_gradient!
@ .\none:3062 [inlined]
[19] _evaluate_marginal_nll_gradient!(g::Vector@NamedTuple…}, model::PumasModel{…}, population::Vector{…}, param::@NamedTuple{…}, vparam::Vector{…}, vvrandeffsorth::Vector{…}, approx::NaivePooled, tr@NamedTuple::TransformVariables.TransformTuple{…}, diffeq_options::@NamedTuple{…}, ::EnsembleSerial; update_ebes::Bool)
@ Pumas .\none:4771
[20] _evaluate_marginal_nll_gradient!
@ .\none:4749 [inlined]
[21] _evaluate_marginal_nll_gradient!(g::Vector@NamedTuple…}, model::PumasModel{…}, population::Vector{…}, param::@NamedTuple{…}, vparam::Vector{…}, vvrandeffsorth::Vector{…}, approx::NaivePooled, tr@NamedTuple::TransformVariables.TransformTuple{…}, diffeq_options::@NamedTuple{…}, ::EnsembleThreads; update_ebes::Bool)
@ Pumas .\none:4905
[22] _evaluate_marginal_nll_gradient!
@ .\none:4885 [inlined]
[23] #_evaluate_objective_gradient!#718
@ .\none:6433 [inlined]
[24] _evaluate_objective_gradient!
@ .\none:6420 [inlined]
[25] (::Pumas.var"#722#728"{…})(f::Float64, g::Vector{…}, _vparam::Vector{…})
@ Pumas .\none:6590
[26] (::Pumas.OptimSafeFGFunction{true, Pumas.var"#722#728"{…}})(F::Float64, g::Vector{Float64}, x::Vector{Float64})
@ Pumas .\none:6175
[27] (::NLSolversBase.var"#83#87"{Pumas.OptimSafeFGFunction{…}, Float64})(G::Vector{Float64}, x::Vector{Float64})
@ NLSolversBase C:\Users\mgopalakrishnan.julia\packages\NLSolversBase\gOqwS\src\objective_types\incomplete.jl:108
[28] value_gradient!!(obj::NLSolversBase.OnceDifferentiable{Float64, Vector{…}, Float64, Vector{…}}, x::Vector{Float64})
@ NLSolversBase C:\Users\mgopalakrishnan.julia\packages\NLSolversBase\gOqwS\src\interface.jl:82
@ NLSolversBase C:\Users\mgopalakrishnan.julia\packages\NLSolversBase\gOqwS\src\interface.jl:82
[30] initial_state(method::Optim.BFGS{…}, ::Optim.Options{…}, d::NLSolversBase.OnceDifferentiable{…}, x0::Vector{…})
@ Optim C:\Users\mgopalakrishnan.julia\packages\Optim\mv9zc\src\multivariate\solvers\first_order\bfgs.jl:108
[31] (::Pumas.DefaultOptimizeFN{…})(cost::NLSolversBase.OnceDifferentiable{…}, p::Vector{…}, pumas_callback::Nothing, verbose::Bool, optim_cache::Nothing, check_zero_gradient::Pumas.var"#724#730"{…})
@ Pumas .\none:4501
[32] _fit(m::PumasModel{…}, population::Vector{…}, vparam::Vector{…}, approx::NaivePooled, ensemblealg::En@NamedTupleembleThreads, optimize_fn::Pumas.DefaultOptimizeFN{…}, checkidentification::Bool, diffeq_options::@NamedTuple{…}, init_vrandeffsorth::Vector{…}, verbose::Bool, ignore_numerical_error::Bool, opti@NamedTuple_state::Nothing)
@ Pumas .\none:6754
[33] fit(model::PumasModel{…}, population::Vecto@NamedTuple{…}, param::@NamedTuple{…}, approx::NaivePooled; init_randeffs::Nothing, optim_alg::Nothing, optim_options::@NamedTuple{}, optimize_@NamedTuplen::Nothing, constantcoef::Tuple{}, omegas::Tuple{}, ensemblealg::EnsembleThreads, diffeq_options::@NamedTuple{}, checkidentification::Bool, verbose::Bool, ignore_numer@NamedTuplecal_error::Bool)
@ Pumas .\none:6115
[34] fit(model::PumasModel{…}, population::Vector{…}, param::@NamedTuple{…}, approx::NaivePooled)
@ Pumas .\none:6015
[35] top-level scope

Nevermind. When I explicitly specified the module as hinted in the error message, I was able to run it.

Thanks.

@derived begin
PainScore ~ @. Pumas.Categorical(p₁, p₂, p₃, p₄)
end