This works but for the following combination of split_method
and split_by
it gives errors. example of cases when it does not work:
split_method= KFold(K = 5)
split_by= ByObservation(allsubjects = true)
pl = Pumas.cv_pointwise_loglikelihood(res_t,split_method,split_by)
I get the following error
pl = Pumas.cv_pointwise_loglikelihood(res_t,split_method,split_by)
ERROR: BoundsError: attempt to access 8×1 Matrix{Float64} at index [7:9, 1:1]
Stacktrace:
[1] throw_boundserror(A::Matrix{Float64}, I::Tuple{UnitRange{Int64}, Base.Slice{Base.OneTo{Int64}}})
@ Base ./abstractarray.jl:691
[2] checkbounds
@ ./abstractarray.jl:656 [inlined]
[3] view
@ ./subarray.jl:177 [inlined]
[4] #973
@ /build/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/Td3Jp/src/estimation/bayes/crossvalidation/datasplit.jl:446 [inlined]
[5] iterate
@ ./generator.jl:47 [inlined]
[6] collect_to!(dest::Vector{Float64}, itr::Base.Generator{Vector{UnitRange{Int64}}, Pumas.var"#973#980"{Matrix{Float64}}}, offs::Int64, st::Int64)
@ Base ./array.jl:782
[7] collect_to_with_first!
@ ./array.jl:760 [inlined]
[8] _collect(c::Vector{UnitRange{Int64}}, itr::Base.Generator{Vector{UnitRange{Int64}}, Pumas.var"#973#980"{Matrix{Float64}}}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})
@ Base ./array.jl:754
[9] collect_similar
@ ./array.jl:653 [inlined]
[10] map
@ ./abstractarray.jl:2867 [inlined]
[11] #972
@ /build/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/Td3Jp/src/estimation/bayes/crossvalidation/datasplit.jl:445 [inlined]
[12] mapreduce_impl(f::Pumas.var"#972#979"{Vector{UnitRange{Int64}}}, op::typeof(+), A::Vector{Matrix{Float64}}, ifirst::Int64, ilast::Int64, blksize::Int64)
@ Base ./reduce.jl:244
[13] mapreduce_impl
@ ./reduce.jl:259 [inlined]
[14] _mapreduce(f::Pumas.var"#972#979"{Vector{UnitRange{Int64}}}, op::typeof(+), #unused#::IndexLinear, A::Vector{Matrix{Float64}})
@ Base ./reduce.jl:417
[15] _mapreduce_dim(f::Function, op::Function, #unused#::Base._InitialValue, A::Vector{Matrix{Float64}}, #unused#::Colon)
@ Base ./reducedim.jl:330
[16] #mapreduce#731
@ ./reducedim.jl:322 [inlined]
[17] mapreduce(f::Function, op::Function, A::Vector{Matrix{Float64}})
@ Base ./reducedim.jl:322
[18] (::Pumas.var"#971#978"{Pumas.BayesMCMCResults{BayesMCMC{AdvancedHMC.GeneralisedNoUTurn{Float64}, Float64, Int64, Int64, Int64, Int64, Int64, Float64, EnsembleThreads, Bool, Bool, Bool, Bool, TaskLocalRNG, NamedTuple{(:abstol, :reltol, :alg), Tuple{Float64, Float64, Rodas5P{0, true, Nothing, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}}}, Bool, Int64, NamedTuple{(), Tuple{}}}, Vector{Pumas.ThreadedBayesLogDensity{PumasModel{(θ = 5, Ω₁ = 1, Ω₂ = 1, Ω₃ = 1, Ω₄ = 1, σ₁ = 1), 4, (:Central,), ParamSet{NamedTuple{(:θ, :Ω₁, :Ω₂, :Ω₃, :Ω₄, :σ₁), Tuple{Constrained{FullNormal, VectorDomain{Vector{Float64}, Vector{TransformVariables.Infinity{true}}, Vector{Float64}}}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}}}}, Serialization.__deserialized_types__.var"#127#137", Pumas.TimeDispatcher{Serialization.__deserialized_types__.var"#128#138", Serialization.__deserialized_types__.var"#130#140"}, Nothing, Serialization.__deserialized_types__.var"#132#142", ODEProblem{Nothing, Tuple{Nothing, Nothing}, false, Nothing, ODEFunction{false, ModelingToolkit.ODEFunctionClosure{Serialization.__deserialized_types__.var"#133#143", Serialization.__deserialized_types__.var"#134#144"}, UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Serialization.__deserialized_types__.var"#135#145", Serialization.__deserialized_types__.var"#136#146", ModelingToolkit.ODESystem}, NamedTuple{(:θ, :Ω₁, :Ω₂, :Ω₃, :Ω₄, :σ₁), Tuple{Vector{Float64}, Float64, Float64, Float64, Float64, Float64}}, Vector{Subject{NamedTuple{(:CONC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantInterpolationStructArray{Vector{Float64}, NamedTuple{(:WT, :ECMO_DAYS, :IS_CIRCUIT_CHANGE, :site, :T), Tuple{Vector{Float64}, Vector{Float64}, Vector{Int64}, Vector{Int64}, Vector{Float64}}}, Symbol}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, Vector{Vector{Float64}}, Vector{Vector{Float64}}, Vector{ForwardDiff.GradientConfig{ForwardDiff.Tag{Pumas.Tag, Float64}, Float64, 7, Vector{ForwardDiff.Dual{ForwardDiff.Tag{Pumas.Tag, Float64}, Float64, 7}}}}, Vector{DiffResults.MutableDiffResult{1, Float64, Tuple{Vector{Float64}}}}, NamedTuple{(:abstol, :reltol, :alg), Tuple{Float64, Float64, Rodas5P{0, true, Nothing, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}}}}}, Vector{Vector{Vector{Float64}}}, Vector{AbstractMCMC.SamplingStats}, Nothing}, ByObservation{true}, Vector{UnitRange{Int64}}})(vaug::Vector{Float64})
@ Pumas /build/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/Td3Jp/src/estimation/bayes/crossvalidation/datasplit.jl:444
[19] iterate
@ ./generator.jl:47 [inlined]
[20] _collect(c::Vector{Vector{Float64}}, itr::Base.Generator{Vector{Vector{Float64}}, Pumas.var"#971#978"{Pumas.BayesMCMCResults{BayesMCMC{AdvancedHMC.GeneralisedNoUTurn{Float64}, Float64, Int64, Int64, Int64, Int64, Int64, Float64, EnsembleThreads, Bool, Bool, Bool, Bool, TaskLocalRNG, NamedTuple{(:abstol, :reltol, :alg), Tuple{Float64, Float64, Rodas5P{0, true, Nothing, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}}}, Bool, Int64, NamedTuple{(), Tuple{}}}, Vector{Pumas.ThreadedBayesLogDensity{PumasModel{(θ = 5, Ω₁ = 1, Ω₂ = 1, Ω₃ = 1, Ω₄ = 1, σ₁ = 1), 4, (:Central,), ParamSet{NamedTuple{(:θ, :Ω₁, :Ω₂, :Ω₃, :Ω₄, :σ₁), Tuple{Constrained{FullNormal, VectorDomain{Vector{Float64}, Vector{TransformVariables.Infinity{true}}, Vector{Float64}}}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}}}}, Serialization.__deserialized_types__.var"#127#137", Pumas.TimeDispatcher{Serialization.__deserialized_types__.var"#128#138", Serialization.__deserialized_types__.var"#130#140"}, Nothing, Serialization.__deserialized_types__.var"#132#142", ODEProblem{Nothing, Tuple{Nothing, Nothing}, false, Nothing, ODEFunction{false, ModelingToolkit.ODEFunctionClosure{Serialization.__deserialized_types__.var"#133#143", Serialization.__deserialized_types__.var"#134#144"}, UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Serialization.__deserialized_types__.var"#135#145", Serialization.__deserialized_types__.var"#136#146", ModelingToolkit.ODESystem}, NamedTuple{(:θ, :Ω₁, :Ω₂, :Ω₃, :Ω₄, :σ₁), Tuple{Vector{Float64}, Float64, Float64, Float64, Float64, Float64}}, Vector{Subject{NamedTuple{(:CONC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantInterpolationStructArray{Vector{Float64}, NamedTuple{(:WT, :ECMO_DAYS, :IS_CIRCUIT_CHANGE, :site, :T), Tuple{Vector{Float64}, Vector{Float64}, Vector{Int64}, Vector{Int64}, Vector{Float64}}}, Symbol}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, Vector{Vector{Float64}}, Vector{Vector{Float64}}, Vector{ForwardDiff.GradientConfig{ForwardDiff.Tag{Pumas.Tag, Float64}, Float64, 7, Vector{ForwardDiff.Dual{ForwardDiff.Tag{Pumas.Tag, Float64}, Float64, 7}}}}, Vector{DiffResults.MutableDiffResult{1, Float64, Tuple{Vector{Float64}}}}, NamedTuple{(:abstol, :reltol, :alg), Tuple{Float64, Float64, Rodas5P{0, true, Nothing, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}}}}}, Vector{Vector{Vector{Float64}}}, Vector{AbstractMCMC.SamplingStats}, Nothing}, ByObservation{true}, Vector{UnitRange{Int64}}}}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})
Another case is
split_method_3= LeaveFutureK(K = 2)
split_by= ByObservation(allsubjects = true)
pl = Pumas.cv_pointwise_loglikelihood(res_t,split_method_3,split_by)
It gives the following output
julia> split_method_3= LeaveFutureK(K = 2)
LeaveFutureK(2, 2, false)
julia> pl = Pumas.cv_pointwise_loglikelihood(res_t,split_method_3,split_by)
Pointwise log likelihood
Type: LeaveFutureK(2, 2, false) - ByObservation - allsubjects = true
Number of groups: 0
Number of samples per chain: 1900
Number of chains: 4
but when I run Pumas.bic(pl)
it gives the following error:
Pumas.bic(pl)
ERROR: ArgumentError: reducing over an empty collection is not allowed
Stacktrace:
[1] _empty_reduce_error()
@ Base ./reduce.jl:301
[2] reduce_empty(op::Function, #unused#::Type{Float64})
@ Base ./reduce.jl:311
[3] mapreduce_empty(#unused#::typeof(identity), op::Function, T::Type)
@ Base ./reduce.jl:345
[4] reduce_empty(op::Base.MappingRF{typeof(identity), typeof(max)}, #unused#::Type{Float64})
@ Base ./reduce.jl:331
[5] reduce_empty_iter
@ ./reduce.jl:357 [inlined]
[6] mapreduce_empty_iter(f::Function, op::Function, itr::Array{Float64, 3}, ItrEltype::Base.HasEltype)
@ Base ./reduce.jl:353
[7] _mapreduce(f::typeof(identity), op::typeof(max), #unused#::IndexLinear, A::Array{Float64, 3})
@ Base ./reduce.jl:402
[8] _mapreduce_dim
@ ./reducedim.jl:330 [inlined]
[9] #mapreduce#731
@ ./reducedim.jl:322 [inlined]
[10] mapreduce
@ ./reducedim.jl:322 [inlined]
[11] #_maximum#749
@ ./reducedim.jl:894 [inlined]
[12] _maximum
@ ./reducedim.jl:894 [inlined]
[13] #_maximum#748
@ ./reducedim.jl:893 [inlined]
[14] _maximum
@ ./reducedim.jl:893 [inlined]
[15] #maximum#746
@ ./reducedim.jl:889 [inlined]
[16] maximum
@ ./reducedim.jl:889 [inlined]
[17] bic(pl::Pumas.PointwiseLogLikelihood{Array{Float64, 3}, Pumas.SplitData{UnitRange{Int64}, Vector{UnitRange{Int64}}, Vector{UnitRange{Int64}}, UnitRange{Int64}, LeaveFutureK, ByObservation{true}, Vector{UnitRange{Int64}}, Vector{UnitRange{Int64}}}, Pumas.BayesMCMCResults{BayesMCMC{AdvancedHMC.GeneralisedNoUTurn{Float64}, Float64, Int64, Int64, Int64, Int64, Int64, Float64, EnsembleThreads, Bool, Bool, Bool, Bool, TaskLocalRNG, NamedTuple{(), Tuple{}}, Bool, Int64, NamedTuple{(), Tuple{}}}, Vector{Pumas.ThreadedBayesLogDensity{PumasModel{(θ = 4, Ω₁ = 1, Ω₂ = 1, σ₁ = 1, σ₂ = 1, σ₃ = 1), 2, (:Central,), ParamSet{NamedTuple{(:θ, :Ω₁, :Ω₂, :σ₁, :σ₂, :σ₃), Tuple{Constrained{FullNormal, VectorDomain{Vector{Float64}, Vector{TransformVariables.Infinity{true}}, Vector{Float64}}}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}, Gamma{Float64}}}}, Serialization.__deserialized_types__.var"#35#42", Pumas.TimeDispatcher{Serialization.__deserialized_types__.var"#36#43", Serialization.__deserialized_types__.var"#37#44"}, Nothing, Serialization.__deserialized_types__.var"#39#46", Central1, Serialization.__deserialized_types__.var"#40#47", Serialization.__deserialized_types__.var"#41#48", Nothing}, NamedTuple{(:θ, :Ω₁, :Ω₂, :σ₁, :σ₂, :σ₃), Tuple{Vector{Float64}, Float64, Float64, Float64, Float64, Float64}}, Vector{Subject{NamedTuple{(:CONC,), Tuple{Vector{Union{Missing, Float64}}}}, Pumas.ConstantInterpolationStructArray{Vector{Float64}, NamedTuple{(:WT, :ECMO_DAYS, :IS_CIRCUIT_CHANGE, :site, :T), Tuple{Vector{Float64}, Vector{Float64}, Vector{Int64}, Vector{Int64}, Vector{Float64}}}, Symbol}, Vector{Pumas.Event{Float64, Float64, Float64, Float64, Float64, Float64, Int64}}, Vector{Float64}}}, Vector{Vector{Float64}}, Vector{Vector{Float64}}, Vector{ForwardDiff.GradientConfig{ForwardDiff.Tag{Pumas.Tag, Float64}, Float64, 6, Vector{ForwardDiff.Dual{ForwardDiff.Tag{Pumas.Tag, Float64}, Float64, 6}}}}, Vector{DiffResults.MutableDiffResult{1, Float64, Tuple{Vector{Float64}}}}, NamedTuple{(), Tuple{}}}}, Vector{Vector{Vector{Float64}}}, Vector{AbstractMCMC.SamplingStats}, Nothing}})
@ Pumas /build/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Pumas/Td3Jp/src/estimation/bayes/crossvalidation/crossvalidation.jl:117
[18] top-level scope
@ ~/data/code/ECMO_UMMC/Total_BAYESIAN.jl:578