Non-Compartmental Analysis (NCA)
NCA in Pumas is conducted in the following steps:
- Read source data (
.csv
,.xlxs
,.xpt
,sas7bdata
) - Create a
NCAPopulation
by mapping variables from source data to Pumas-NCA data format - PumasNCADF - Exploratory data analysis
- Run
NCA
analysis - Generate report
Pumas also provides a convenient way to perform NCA analysis within the model as well, this is discussed in the Model integrated NCA section.
Read Source Data
The Pumas-NCA data format - PumasNCADF provides the specification requirements of the source data. Currently, several file formats can be read in for analysis:
.csv
(CSV
package).xslx
(XSLX
package).sas7bdat
/.xpt
(ReadStatTables
package).arrow
(Arrow
package)
For this introduction we'll use the PharmaDatasets
package and the po_sad_1
dataset:
using PharmaDatasets
pkdata = dataset("po_sad_1")
first(pkdata, 6)
Row | id | time | dv | amt | evid | cmt | rate | age | wt | doselevel | isPM | isfed | sex | route |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Int64 | Float64 | Float64? | Float64? | Int64 | Int64? | Float64 | Int64 | Int64 | Int64 | String3 | String3 | String7 | String3 | |
1 | 1 | 0.0 | missing | 30.0 | 1 | 1 | 0.0 | 51 | 74 | 30 | no | yes | male | ev |
2 | 1 | 0.25 | 35.7636 | missing | 0 | missing | 0.0 | 51 | 74 | 30 | no | yes | male | ev |
3 | 1 | 0.5 | 71.9551 | missing | 0 | missing | 0.0 | 51 | 74 | 30 | no | yes | male | ev |
4 | 1 | 0.75 | 97.3356 | missing | 0 | missing | 0.0 | 51 | 74 | 30 | no | yes | male | ev |
5 | 1 | 1.0 | 128.919 | missing | 0 | missing | 0.0 | 51 | 74 | 30 | no | yes | male | ev |
6 | 1 | 2.0 | 155.85 | missing | 0 | missing | 0.0 | 51 | 74 | 30 | no | yes | male | ev |
Create a NCAPopulation
The generated DataFrame
object now needs to be mapped to the requirements of Pumas NCA
package. Mapping is done using the read_nca
function that is described in detail later. An example for read_nca
is the following:
using NCA
ncapop = read_nca(pkdata; observations = :dv, group = [:doselevel])
NCAPopulation (18 subjects):
Group: [["doselevel" => 30], ["doselevel" => 60], ["doselevel" => 90]]
Number of missing observations: 18
Number of blq observations: 0
Mapping a DataFrame
to the Pumas NCA
package requirements using read_nca
generates an object called NCAPopulation
, which is collection of NCASubject
's, i.e., ncapop
is of type NCAPopulation
.
Exploratory Data Analysis
Exploratory analysis of the NCAPopulation
can be performed using the built-in plotting ecosystem. The NCA subsection of the Plotting section provides more details, but here are some example syntax and the corresponding plots.
Observations-time plots
We can produce a plot of the concentration against time using observations_vs_time
. The plotting recipes for NCA analyses are fund in the NCAUtilities
package. Below is the code for generating this plot for the first subject found using ncapop[1]
:
using NCAUtilities
observations_vs_time(
ncapop[1];
axis = (; xlabel = "Time (hours)", ylabel = "CTM Concentration (mg L⁻¹)"),
)
We can also use log-scale for the concentrations such that exponential decay shows as a straight line. Below is the code to set the y-scale to use the natural logarithm:
observations_vs_time(
ncapop[1];
axis = (; xlabel = "Time (hours)", ylabel = "CTM Concentration (mg L⁻¹)", yscale = log),
)
Other options are yscale = log10
and yscale = log2
for a base-10 and base-2 logarithm.
To generate these plots side-by-side we have to create a Figure
-object first, and then pass fig[row,column]
as the first argument. row
specifies which row of the figure the element should be added to and column
specifies the column number.
using CairoMakie
fig = Figure()
observations_vs_time(
fig[1, 1],
ncapop[1];
axis = (; xlabel = "Time (hours)", ylabel = "CTM Concentration (mg L⁻¹)"),
)
observations_vs_time(
fig[1, 2],
ncapop[1];
axis = (; xlabel = "Time (hours)", ylabel = "CTM Concentration (mg L⁻¹)", yscale = log),
)
fig
Summary plots
We can also group all the subjects into a single summarizing plot of the concentration against time using summary_observations_vs_time
:
summary_observations_vs_time(
ncapop;
axis = (; xlabel = "Time (hours)", ylabel = "CTM Concentration (mg L⁻¹)"),
)
Subject fit plots
We can also check all the subject fits with:
subject_fits(ncapop; axis = (; yscale = log), rows = 3, columns = 3)
Run Analysis
The NCAPopulation
object is the processed version of the DataFrame
that is amenable for a complete NCA analysis via run_nca
or individual parameter results through a collection of functions described in the NCA Function List. Example syntax to perform a complete NCA analysis is below:
using Dates
pk_nca = run_nca(
ncapop;
sigdigits = 3,
studyid = "STUDY-001",
studytitle = "Phase 1 SAD of Drug Y",
author = [("Mary Jane", "Pumas-AI"), ("Joe Smith", "Pumas-AI")],
sponsor = "PumasAI",
date = Dates.now(),
conclabel = "CTMX Concentration (mg/L)",
grouplabels = ["Dose (mg)"],
timelabel = "Time (Hr)",
versionnumber = v"0.1",
)
The result of a complete NCA analysis using run_nca
is an object called NCAReport
, i.e., pk_nca
is of type NCAReport
. This object carries the result of the analysis in a DataFrame
called reportdf
and corresponding metadata information that are used for post-processing the results.
Summarize results
The per subject results in the DataFrame
component of NCAReport
, reportdf
, can be summarized using the summarize
function:
parms = [:cmax, :aucinf_obs]
summary_output = summarize(pk_nca.reportdf; parameters = parms)
Row | parameters | numsamples | minimum | maximum | mean | std | geomean | geostd | geomeanCV |
---|---|---|---|---|---|---|---|---|---|
String | Int64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | |
1 | cmax | 18 | 142.0 | 2230.0 | 696.0 | 493.824 | 567.057 | 1.94997 | 74.9677 |
2 | aucinf_obs | 18 | 5600.0 | 75400.0 | 26070.0 | 21122.4 | 18866.5 | 2.32614 | 101.954 |
The summary_output
generated above is of type DataFrame
.
Plot results
We can use several plotting functions from NCAUtilities
package for the results of run_nca
.
The NCA subsection of the Plotting section provides more details, but here are some example syntax and the corresponding plots.
Subject fits
subject_fits(pk_nca; columns = 2, rows = 3)
Parameter distributions
parameters_dist(pk_nca; parameter = :aucinf_obs, rows = 3, columns = 1)
Parameter distribution by groups (ID or covariates)
parameters_vs_group(pk_nca; parameter = :aucinf_obs)
Generate Report
The report
function takes in either a NCAPopulation
or a NCAReport
object to generate a comprehensive, currently only PDF, report. This generated PDF file has all the necessary information including tables, listings and figures that are required for NCA analysis. Example syntax:
report(pk_nca; output = "my_nca_report", title = "report")
[ Info: Generating Tables
[ Info: Generating Plots
┌ Warning: Could not create plot.
│ error =
│ MethodError: convert_single_argument(::Vector{Missing}) is ambiguous.
│
│ Candidates:
│ convert_single_argument(a::AbstractArray{<:Union{Missing, var"#s856"} where var"#s856"<:GeometryBasics.Point{N, PT}}) where {N, PT}
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/conversions.jl:45
│ convert_single_argument(a::AbstractArray{<:Union{Missing, var"#s856"} where var"#s856"<:Real})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/conversions.jl:40
│
│ Possible fix, define
│ convert_single_argument(::AbstractArray{<:Missing})
│
│ func = parameters_dist (generic function with 4 methods)
│ backtrace =
│
│ Stacktrace:
│ [1] convert_single_argument(a::Vector{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/conversions.jl:52
│ [2] map
│ @ ./tuple.jl:291 [inlined]
│ [3] convert_arguments(T::Type{MakieCore.Plot{Makie.hist}}, args::Vector{Any}; kw::@Kwargs{})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/conversions.jl:20
│ [4] convert_arguments(T::Type{MakieCore.Plot{Makie.hist}}, args::Vector{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/conversions.jl:14
│ [5] conversion_pipeline(P::Type{MakieCore.Plot{Makie.hist}}, used_attrs::Tuple{}, args::Tuple{Vector{Any}}, kw_obs::Observables.Observable{Vector{Pair{Symbol, Any}}}, args_obs::Tuple{Observables.Observable{Any}}, user_attributes::Dict{Symbol, Any}, deregister::Vector{Observables.ObserverFunction}, recursion::Int64)
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:227
│ [6] conversion_pipeline(P::Type{MakieCore.Plot{Makie.hist}}, used_attrs::Tuple{}, args::Tuple{Vector{Any}}, kw_obs::Observables.Observable{Vector{Pair{Symbol, Any}}}, args_obs::Tuple{Observables.Observable{Any}}, user_attributes::Dict{Symbol, Any}, deregister::Vector{Observables.ObserverFunction})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:218
│ [7] (MakieCore.Plot{Makie.hist})(user_args::Tuple{Vector{Any}}, user_attributes::Dict{Symbol, Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:278
│ [8] _create_plot!(F::Function, attributes::Dict{Symbol, Any}, scene::MakieCore.Plot{NCAUtilities.parameters_dist, Tuple{NCAReport}}, args::Vector{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/figureplotting.jl:390
│ [9] hist!(::MakieCore.Plot{NCAUtilities.parameters_dist, Tuple{NCAReport}}, ::Vararg{Any}; kw::@Kwargs{label::String, color::Observables.Observable{Any}, strokecolor::Observables.Observable{Any}, strokewidth::Observables.Observable{Any}, cycle::Observables.Observable{Any}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/NeQjl/src/recipes.jl:453
│ [10] plot!(pg::MakieCore.Plot{NCAUtilities.parameters_dist, Tuple{NCAReport}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:67
│ [11] connect_plot!(parent::Makie.Scene, plot::MakieCore.Plot{NCAUtilities.parameters_dist, Tuple{NCAReport}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:395
│ [12] plot!
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:412 [inlined]
│ [13] plot!(ax::Makie.Axis, plot::MakieCore.Plot{NCAUtilities.parameters_dist, Tuple{NCAReport}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/figureplotting.jl:412
│ [14] _create_plot!(::Function, ::Dict{Symbol, Any}, ::Makie.Axis, ::MakieCore.Attributes, ::Vararg{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/figureplotting.jl:381
│ [15] parameters_dist!(::Makie.Axis, ::Vararg{Any}; kw::@Kwargs{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}, group::Vector{Pair{String, Any}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/NeQjl/src/recipes.jl:189
│ [16] parameters_dist(fig::GridLayoutBase.GridPosition, report::NCAReport; axis::@NamedTuple{}, keywords::@Kwargs{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}, group::Vector{Pair{String, Any}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:94
│ [17] parameters_dist
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:79 [inlined]
│ [18] #62
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:114 [inlined]
│ [19] (::PlottingUtilities.var"#11#12"{@Kwargs{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}}, NCAUtilities.var"#62#65"{@NamedTuple{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}}, @NamedTuple{}, NCAReport}, Makie.Figure, SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}})()
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:137
│ [20] _with_updates_suspended(f::PlottingUtilities.var"#11#12"{@Kwargs{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}}, NCAUtilities.var"#62#65"{@NamedTuple{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}}, @NamedTuple{}, NCAReport}, Makie.Figure, SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}}, fig::Makie.Figure; update::Bool)
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:189
│ [21] _with_updates_suspended(f::Function, fig::Makie.Figure)
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:185
│ [22] #facet#10
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:129 [inlined]
│ [23] facet
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:128 [inlined]
│ [24] (::NCAUtilities.var"#61#64"{@NamedTuple{fontsize::Int64, size::Tuple{Int64, Int64}}, @NamedTuple{}, NCAReport})(keywords::@NamedTuple{paginate::Bool, parameter::Symbol, groups::SubArray{Vector{Pair{String, Any}}, 1, Vector{Vector{Pair{String, Any}}}, Tuple{UnitRange{Int64}}, true}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:113
│ [25] pagination(func::NCAUtilities.var"#61#64"{@NamedTuple{fontsize::Int64, size::Tuple{Int64, Int64}}, @NamedTuple{}, NCAReport}, keywords::@Kwargs{paginate::Bool, parameter::Symbol}; limit::Int64, vars::@Kwargs{groups::Vector{Vector{Pair{String, Any}}}})
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:107
│ [26] parameters_dist(report::NCAReport; figure::@NamedTuple{fontsize::Int64, size::Tuple{Int64, Int64}}, axis::@NamedTuple{}, keywords::@Kwargs{paginate::Bool, parameter::Symbol})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:106
│ [27] parameters_dist
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_dist.jl:98 [inlined]
│ [28] (::NCAUtilities.var"#171#178"{NCAUtilities.var"#171#172#179"{typeof(parameters_dist), Int64, Tuple{Int64, Int64}}})(args::NCAReport; kws::@Kwargs{parameter::Symbol})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/reports/reports.jl:141
│ [29] report(r::NCAReport, summary::DataFrame; output::String, force::Bool, clean::Bool, header::String, footer::String, plot_fontsize::Int64, plot_resolution::Tuple{Int64, Int64}, section_order::Vector{String}, plot_styles::NCAUtilities.PlotStyles, kws::@Kwargs{title::String})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/reports/reports.jl:171
│ [30] top-level scope
│ @ introduction.md:208
│ [31] eval
│ @ ./boot.jl:385 [inlined]
│ [32] #60
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:754 [inlined]
│ [33] cd(f::Documenter.var"#60#62"{Module, Expr}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [34] (::Documenter.var"#59#61"{Documenter.Page, Module, Expr})()
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:753
│ [35] (::IOCapture.var"#5#9"{DataType, Documenter.var"#59#61"{Documenter.Page, Module, Expr}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}})()
│ @ IOCapture ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Y5rEA/src/IOCapture.jl:170
│ [36] with_logstate(f::Function, logstate::Any)
│ @ Base.CoreLogging ./logging.jl:515
│ [37] with_logger
│ @ ./logging.jl:627 [inlined]
│ [38] capture(f::Documenter.var"#59#61"{Documenter.Page, Module, Expr}; rethrow::Type, color::Bool, passthrough::Bool, capture_buffer::IOBuffer, io_context::Vector{Any})
│ @ IOCapture ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Y5rEA/src/IOCapture.jl:167
│ [39] runner(::Type{Documenter.Expanders.ExampleBlocks}, node::MarkdownAST.Node{Nothing}, page::Documenter.Page, doc::Documenter.Document)
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:752
│ [40] dispatch(::Type{Documenter.Expanders.ExpanderPipeline}, ::MarkdownAST.Node{Nothing}, ::Vararg{Any})
│ @ Documenter.Selectors ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/utilities/Selectors.jl:170
│ [41] expand(doc::Documenter.Document)
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:22
│ [42] runner(::Type{Documenter.Builder.ExpandTemplates}, doc::Documenter.Document)
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/builder_pipeline.jl:222
│ [43] dispatch(::Type{Documenter.Builder.DocumentPipeline}, x::Documenter.Document)
│ @ Documenter.Selectors ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/utilities/Selectors.jl:170
│ [44] #89
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/makedocs.jl:272 [inlined]
│ [45] withenv(::Documenter.var"#89#91"{Documenter.Document}, ::Pair{String, Nothing}, ::Vararg{Pair{String, Nothing}})
│ @ Base ./env.jl:257
│ [46] #88
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/makedocs.jl:271 [inlined]
│ [47] cd(f::Documenter.var"#88#90"{Documenter.Document}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [48] makedocs(; debug::Bool, format::Documenter.HTMLWriter.HTML, kwargs::@Kwargs{plugins::Vector{CitationBibliography}, modules::Vector{Module}, doctest::Bool, warnonly::Vector{Symbol}, clean::Bool, draft::Bool, linkcheck::Bool, linkcheck_timeout::Int64, linkcheck_ignore::Vector{Regex}, sitename::String, authors::String, remotes::Nothing, pages::Vector{Any}})
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/makedocs.jl:271
│ [49] top-level scope
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/docs/make.jl:75
│ [50] include(mod::Module, _path::String)
│ @ Base ./Base.jl:495
│ [51] exec_options(opts::Base.JLOptions)
│ @ Base ./client.jl:318
└ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/reports/reports.jl:151
┌ Warning: Could not create plot.
│ error = ArgumentError: cannot convert a value to Union{} for assignment
│ func = parameters_vs_group (generic function with 4 methods)
│ backtrace =
│
│ Stacktrace:
│ [1] convert(T::Type{Union{}}, x::Missing)
│ @ Base ./essentials.jl:315
│ [2] setindex!(A::Vector{Union{}}, x::Missing, i1::Int64)
│ @ Base ./array.jl:1021
│ [3] _unsafe_copyto!(dest::Vector{Union{}}, doffs::Int64, src::Vector{Missing}, soffs::Int64, n::Int64)
│ @ Base ./array.jl:299
│ [4] unsafe_copyto!
│ @ ./array.jl:353 [inlined]
│ [5] _copyto_impl!
│ @ ./array.jl:376 [inlined]
│ [6] copyto!
│ @ ./array.jl:363 [inlined]
│ [7] copyto!
│ @ ./array.jl:385 [inlined]
│ [8] _collect
│ @ ./array.jl:696 [inlined]
│ [9] collect
│ @ ./array.jl:694 [inlined]
│ [10] (CategoricalArrays.CategoricalVector{Missing, UInt32})(::UndefInitializer, dims::Tuple{Int64}; levels::Vector{Missing}, ordered::Bool)
│ @ CategoricalArrays ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:164
│ [11] CategoricalArray
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:157 [inlined]
│ [12] _convert(::Type{CategoricalArrays.CategoricalVector{Missing, UInt32}}, A::Vector{Missing}; levels::Vector{Missing})
│ @ CategoricalArrays ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:358
│ [13] _convert
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:354 [inlined]
│ [14] #_#34
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:253 [inlined]
│ [15] CategoricalArray
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:249 [inlined]
│ [16] CategoricalArray
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:258 [inlined]
│ [17] #CategoricalVector#38
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:271 [inlined]
│ [18] (::PlottingUtilities.var"#func#72"{PlottingUtilities.var"#func#66#73"{typeof(Makie.violin!)}})(plot::MakieCore.Plot{NCAUtilities.parameters_vs_group, Tuple{NCAReport}}, xs::CategoricalArrays.CategoricalVector{Int64, UInt32, Int64, CategoricalArrays.CategoricalValue{Int64, UInt32}, Union{}}, ys::Vector{Missing}; kws::@Kwargs{color::Observables.Observable{Any}, cycle::Observables.Observable{Any}})
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:1244
│ [19] plot!(pg::MakieCore.Plot{NCAUtilities.parameters_vs_group, Tuple{NCAReport}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_vs_group.jl:59
│ [20] connect_plot!(parent::Makie.Scene, plot::MakieCore.Plot{NCAUtilities.parameters_vs_group, Tuple{NCAReport}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:395
│ [21] plot!
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/interfaces.jl:412 [inlined]
│ [22] plot!(ax::Makie.Axis, plot::MakieCore.Plot{NCAUtilities.parameters_vs_group, Tuple{NCAReport}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/figureplotting.jl:412
│ [23] _create_plot!(::Function, ::Dict{Symbol, Any}, ::Makie.Axis, ::MakieCore.Attributes, ::Vararg{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/6c4lt/src/figureplotting.jl:381
│ [24] parameters_vs_group!(::Makie.Axis, ::Vararg{Any}; kw::@Kwargs{paginate::Bool, parameter::Symbol, group::String})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/NeQjl/src/recipes.jl:189
│ [25] parameters_vs_group(fig::GridLayoutBase.GridPosition, report::NCAReport; axis::@NamedTuple{}, keywords::@Kwargs{paginate::Bool, parameter::Symbol, group::String})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_vs_group.jl:82
│ [26] (::NCAUtilities.var"#77#85"{@NamedTuple{paginate::Bool, parameter::SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}}, @NamedTuple{}, NCAReport})(figpos::GridLayoutBase.GridPosition, parameter::Symbol)
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_vs_group.jl:122
│ [27] (::PlottingUtilities.var"#11#12"{@Kwargs{}, NCAUtilities.var"#77#85"{@NamedTuple{paginate::Bool, parameter::SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}}, @NamedTuple{}, NCAReport}, Makie.Figure, SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}})()
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:137
│ [28] #_with_updates_suspended#19
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:189 [inlined]
│ [29] _with_updates_suspended
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:185 [inlined]
│ [30] #facet#10
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:129 [inlined]
│ [31] facet
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:128 [inlined]
│ [32] (::NCAUtilities.var"#76#84"{@NamedTuple{fontsize::Int64, size::Tuple{Int64, Int64}}, @NamedTuple{}, NCAReport})(keywords::@NamedTuple{paginate::Bool, parameter::SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_vs_group.jl:121
│ [33] pagination(func::NCAUtilities.var"#76#84"{@NamedTuple{fontsize::Int64, size::Tuple{Int64, Int64}}, @NamedTuple{}, NCAReport}, keywords::@Kwargs{paginate::Bool, parameter::Symbol}; limit::Int64, vars::@Kwargs{parameter::Vector{Symbol}})
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/hLMMc/src/convert.jl:107
│ [34] parameters_vs_group(report::NCAReport; figure::@NamedTuple{fontsize::Int64, size::Tuple{Int64, Int64}}, axis::@NamedTuple{}, keywords::@Kwargs{paginate::Bool, parameter::Symbol})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_vs_group.jl:119
│ [35] parameters_vs_group
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/recipes/parameters_vs_group.jl:89 [inlined]
│ [36] (::NCAUtilities.var"#171#178"{NCAUtilities.var"#171#172#179"{typeof(parameters_vs_group), Int64, Tuple{Int64, Int64}}})(args::NCAReport; kws::@Kwargs{parameter::Symbol})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/reports/reports.jl:141
│ [37] report(r::NCAReport, summary::DataFrame; output::String, force::Bool, clean::Bool, header::String, footer::String, plot_fontsize::Int64, plot_resolution::Tuple{Int64, Int64}, section_order::Vector{String}, plot_styles::NCAUtilities.PlotStyles, kws::@Kwargs{title::String})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/reports/reports.jl:178
│ [38] top-level scope
│ @ introduction.md:208
│ [39] eval
│ @ ./boot.jl:385 [inlined]
│ [40] #60
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:754 [inlined]
│ [41] cd(f::Documenter.var"#60#62"{Module, Expr}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [42] (::Documenter.var"#59#61"{Documenter.Page, Module, Expr})()
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:753
│ [43] (::IOCapture.var"#5#9"{DataType, Documenter.var"#59#61"{Documenter.Page, Module, Expr}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}})()
│ @ IOCapture ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Y5rEA/src/IOCapture.jl:170
│ [44] with_logstate(f::Function, logstate::Any)
│ @ Base.CoreLogging ./logging.jl:515
│ [45] with_logger
│ @ ./logging.jl:627 [inlined]
│ [46] capture(f::Documenter.var"#59#61"{Documenter.Page, Module, Expr}; rethrow::Type, color::Bool, passthrough::Bool, capture_buffer::IOBuffer, io_context::Vector{Any})
│ @ IOCapture ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Y5rEA/src/IOCapture.jl:167
│ [47] runner(::Type{Documenter.Expanders.ExampleBlocks}, node::MarkdownAST.Node{Nothing}, page::Documenter.Page, doc::Documenter.Document)
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:752
│ [48] dispatch(::Type{Documenter.Expanders.ExpanderPipeline}, ::MarkdownAST.Node{Nothing}, ::Vararg{Any})
│ @ Documenter.Selectors ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/utilities/Selectors.jl:170
│ [49] expand(doc::Documenter.Document)
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/expander_pipeline.jl:22
│ [50] runner(::Type{Documenter.Builder.ExpandTemplates}, doc::Documenter.Document)
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/builder_pipeline.jl:222
│ [51] dispatch(::Type{Documenter.Builder.DocumentPipeline}, x::Documenter.Document)
│ @ Documenter.Selectors ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/utilities/Selectors.jl:170
│ [52] #89
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/makedocs.jl:272 [inlined]
│ [53] withenv(::Documenter.var"#89#91"{Documenter.Document}, ::Pair{String, Nothing}, ::Vararg{Pair{String, Nothing}})
│ @ Base ./env.jl:257
│ [54] #88
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/makedocs.jl:271 [inlined]
│ [55] cd(f::Documenter.var"#88#90"{Documenter.Document}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [56] makedocs(; debug::Bool, format::Documenter.HTMLWriter.HTML, kwargs::@Kwargs{plugins::Vector{CitationBibliography}, modules::Vector{Module}, doctest::Bool, warnonly::Vector{Symbol}, clean::Bool, draft::Bool, linkcheck::Bool, linkcheck_timeout::Int64, linkcheck_ignore::Vector{Regex}, sitename::String, authors::String, remotes::Nothing, pages::Vector{Any}})
│ @ Documenter ~/run/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/C1XEF/src/makedocs.jl:271
│ [57] top-level scope
│ @ ~/run/_work/PumasDocs.jl/PumasDocs.jl/docs/make.jl:75
│ [58] include(mod::Module, _path::String)
│ @ Base ./Base.jl:495
│ [59] exec_options(opts::Base.JLOptions)
│ @ Base ./client.jl:318
└ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/eg4Er/src/reports/reports.jl:151
[ Info: Gathering System Information
[ Info: Ordering Report Sections
You can view the report generated here.