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 = TypeError: non-boolean (Missing) used in boolean context
│ func = parameters_dist (generic function with 2 methods)
│ backtrace =
│
│ Stacktrace:
│ [1] pick_hist_edges(vals::Vector{Any}, bins::Int64)
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/stats/hist.jl:146
│ [2] #map#111
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/scenes.jl:185 [inlined]
│ [3] map(f::typeof(Makie.pick_hist_edges), scene::MakieCore.Combined{Makie.hist, Tuple{Vector{Any}}}, arg1::Observables.Observable{Vector{Any}}, args::Observables.Observable{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/scenes.jl:182
│ [4] plot!(plot::MakieCore.Combined{Makie.hist, Tuple{Vector{Any}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/stats/hist.jl:163
│ [5] plot!
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:442 [inlined]
│ [6] plot!(scene::MakieCore.Combined{NCAUtilities.parameters_dist, Tuple{NCAReport}}, P::Type{MakieCore.Combined{Makie.hist}}, attributes::MakieCore.Attributes, args::Vector{Any}; kw_attributes::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:344
│ [7] plot!(scene::MakieCore.Combined{NCAUtilities.parameters_dist, Tuple{NCAReport}}, P::Type{MakieCore.Combined{Makie.hist}}, attributes::MakieCore.Attributes, args::Vector{Any})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:311
│ [8] plot!(P::Type{MakieCore.Combined{Makie.hist}}, scene::MakieCore.Combined{NCAUtilities.parameters_dist, Tuple{NCAReport}}, args::Vector{Any}; kw_attributes::Base.Pairs{Symbol, Any, NTuple{7, Symbol}, NamedTuple{(:label, :color, :strokecolor, :strokewidth, :colormap, :colorrange, :cycle), Tuple{String, Vararg{Observables.Observable{Any}, 6}}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:295
│ [9] hist!(::MakieCore.Combined{NCAUtilities.parameters_dist, Tuple{NCAReport}}, ::Vararg{Any}; attributes::Base.Pairs{Symbol, Any, NTuple{7, Symbol}, NamedTuple{(:label, :color, :strokecolor, :strokewidth, :colormap, :colorrange, :cycle), Tuple{String, Vararg{Observables.Observable{Any}, 6}}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/6sckc/src/recipes.jl:38
│ [10] plot!(pg::MakieCore.Combined{NCAUtilities.parameters_dist, Tuple{NCAReport}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_dist.jl:69
│ [11] plot!(scene::Makie.Scene, P::Type{MakieCore.Combined{NCAUtilities.parameters_dist, Tuple{NCAReport}}}, attributes::MakieCore.Attributes, input::Tuple{Observables.Observable{NCAReport}}, args::Observables.Observable{Tuple{NCAReport}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:432
│ [12] plot!(scene::Makie.Scene, P::Type{MakieCore.Combined{NCAUtilities.parameters_dist}}, attributes::MakieCore.Attributes, args::NCAReport; kw_attributes::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:344
│ [13] plot!
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:311 [inlined]
│ [14] plot!(la::Makie.Axis, P::Type{MakieCore.Combined{NCAUtilities.parameters_dist}}, attributes::MakieCore.Attributes, args::NCAReport; kw_attributes::Base.Pairs{Symbol, Any, NTuple{4, Symbol}, NamedTuple{(:paginate, :parameter, :groups, :group), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}, Vector{Pair{String, Int64}}}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/makielayout/blocks/axis.jl:792
│ [15] plot(P::Type{MakieCore.Combined{NCAUtilities.parameters_dist}}, fig::GridLayoutBase.GridPosition, report::NCAReport; axis::NamedTuple{(), Tuple{}}, keywords::Base.Pairs{Symbol, Any, NTuple{4, Symbol}, NamedTuple{(:paginate, :parameter, :groups, :group), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}, Vector{Pair{String, Int64}}}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_dist.jl:99
│ [16] (::NCAUtilities.var"#61#64"{NamedTuple{(:paginate, :parameter, :groups), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport})(figpos::GridLayoutBase.GridPosition, group::Vector{Pair{String, Int64}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_dist.jl:120
│ [17] (::PlottingUtilities.var"#11#12"{Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:paginate, :parameter, :groups), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}}}, NCAUtilities.var"#61#64"{NamedTuple{(:paginate, :parameter, :groups), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport}, Makie.Figure, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}})()
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:135
│ [18] _with_updates_suspended(f::PlottingUtilities.var"#11#12"{Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:paginate, :parameter, :groups), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}}}, NCAUtilities.var"#61#64"{NamedTuple{(:paginate, :parameter, :groups), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport}, Makie.Figure, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}, fig::Makie.Figure; update::Bool)
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:187
│ [19] _with_updates_suspended(f::Function, fig::Makie.Figure)
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:183
│ [20] #facet#10
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:127 [inlined]
│ [21] facet
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:126 [inlined]
│ [22] (::NCAUtilities.var"#60#63"{NamedTuple{(:fontsize, :resolution), Tuple{Int64, Tuple{Int64, Int64}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport})(keywords::NamedTuple{(:paginate, :parameter, :groups), Tuple{Bool, Symbol, SubArray{Vector{Pair{String, Int64}}, 1, Vector{Vector{Pair{String, Int64}}}, Tuple{UnitRange{Int64}}, true}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_dist.jl:119
│ [23] pagination(func::NCAUtilities.var"#60#63"{NamedTuple{(:fontsize, :resolution), Tuple{Int64, Tuple{Int64, Int64}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport}, keywords::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:paginate, :parameter), Tuple{Bool, Symbol}}}; limit::Int64, vars::Base.Pairs{Symbol, Vector{Vector{Pair{String, Int64}}}, Tuple{Symbol}, NamedTuple{(:groups,), Tuple{Vector{Vector{Pair{String, Int64}}}}}})
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:105
│ [24] plot(P::Type{MakieCore.Combined{NCAUtilities.parameters_dist}}, report::NCAReport; figure::NamedTuple{(:fontsize, :resolution), Tuple{Int64, Tuple{Int64, Int64}}}, axis::NamedTuple{(), Tuple{}}, keywords::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:paginate, :parameter), Tuple{Bool, Symbol}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_dist.jl:112
│ [25] plot
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_dist.jl:103 [inlined]
│ [26] #parameters_dist#53
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/6sckc/src/recipes.jl:34 [inlined]
│ [27] parameters_dist
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/6sckc/src/recipes.jl:33 [inlined]
│ [28] (::NCAUtilities.var"#162#169"{NCAUtilities.var"#162#163#170"{typeof(parameters_dist), Int64, Tuple{Int64, Int64}}})(args::NCAReport; kws::Base.Pairs{Symbol, Symbol, Tuple{Symbol}, NamedTuple{(:parameter,), Tuple{Symbol}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/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::Base.Pairs{Symbol, String, Tuple{Symbol}, NamedTuple{(:title,), Tuple{String}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/reports/reports.jl:171
│ [30] top-level scope
│ @ introduction.md:208
│ [31] eval
│ @ ./boot.jl:370 [inlined]
│ [32] #58
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:754 [inlined]
│ [33] cd(f::Documenter.var"#58#60"{Module, Expr}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [34] (::Documenter.var"#57#59"{Documenter.Page, Module, Expr})()
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:753
│ [35] (::IOCapture.var"#4#7"{DataType, Documenter.var"#57#59"{Documenter.Page, Module, Expr}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}})()
│ @ IOCapture ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Rzdxd/src/IOCapture.jl:161
│ [36] with_logstate(f::Function, logstate::Any)
│ @ Base.CoreLogging ./logging.jl:514
│ [37] with_logger
│ @ ./logging.jl:626 [inlined]
│ [38] capture(f::Documenter.var"#57#59"{Documenter.Page, Module, Expr}; rethrow::Type, color::Bool, passthrough::Bool, capture_buffer::IOBuffer)
│ @ IOCapture ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Rzdxd/src/IOCapture.jl:158
│ [39] runner(#unused#::Type{Documenter.Expanders.ExampleBlocks}, node::MarkdownAST.Node{Nothing}, page::Documenter.Page, doc::Documenter.Document)
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:752
│ [40] dispatch(::Type{Documenter.Expanders.ExpanderPipeline}, ::MarkdownAST.Node{Nothing}, ::Vararg{Any})
│ @ Documenter.Selectors ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/utilities/Selectors.jl:170
│ [41] expand(doc::Documenter.Document)
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:22
│ [42] runner(#unused#::Type{Documenter.Builder.ExpandTemplates}, doc::Documenter.Document)
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/builder_pipeline.jl:222
│ [43] dispatch(#unused#::Type{Documenter.Builder.DocumentPipeline}, x::Documenter.Document)
│ @ Documenter.Selectors ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/utilities/Selectors.jl:170
│ [44] #85
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/makedocs.jl:248 [inlined]
│ [45] withenv(::Documenter.var"#85#87"{Documenter.Document}, ::Pair{String, Nothing}, ::Vararg{Pair{String, Nothing}})
│ @ Base ./env.jl:197
│ [46] #84
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/makedocs.jl:247 [inlined]
│ [47] cd(f::Documenter.var"#84#86"{Documenter.Document}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [48] makedocs(; debug::Bool, format::Documenter.HTMLWriter.HTML, kwargs::Base.Pairs{Symbol, Any, NTuple{13, Symbol}, NamedTuple{(:plugins, :modules, :doctest, :warnonly, :clean, :draft, :linkcheck, :linkcheck_timeout, :linkcheck_ignore, :sitename, :authors, :remotes, :pages), Tuple{Vector{CitationBibliography}, Vector{Module}, Bool, Vector{Symbol}, Bool, Bool, Bool, Int64, Vector{Regex}, String, String, Nothing, Vector{Any}}}})
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/makedocs.jl:247
│ [49] top-level scope
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/docs/make.jl:71
│ [50] include(mod::Module, _path::String)
│ @ Base ./Base.jl:457
│ [51] exec_options(opts::Base.JLOptions)
│ @ Base ./client.jl:307
└ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/reports/reports.jl:151
┌ Warning: Could not create plot.
│ error =
│ MethodError: convert(::Type{Union{}}, ::Missing) is ambiguous.
│
│ Candidates:
│ convert(::Type{T}, x) where T<:LabelledArrays.LArray
│ @ LabelledArrays ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/LabelledArrays/FI31L/src/larray.jl:143
│ convert(::Type{T}, arg) where T<:VecElement
│ @ Base baseext.jl:19
│ convert(T::Type{<:Nothing}, x)
│ @ Base essentials.jl:290
│ convert(::Type{<:Makie.ScalarOrVector}, x::T) where T
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/types.jl:294
│ convert(::Type{P}, α) where P<:(MultivariatePolynomials.AbstractPolynomialLike)
│ @ MultivariatePolynomials ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MultivariatePolynomials/6TYc8/src/conversion.jl:2
│ convert(T::Type{<:Core.IntrinsicFunction}, x)
│ @ Base essentials.jl:289
│ convert(::Type{T}, obj) where T<:FunctionWrappers.FunctionWrapper
│ @ FunctionWrappers ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/FunctionWrappers/Q5cBx/src/FunctionWrappers.jl:113
│ convert(::Type{T}, x) where T<:Observables.Observable
│ @ Observables ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Observables/PHGQ8/src/Observables.jl:151
│
│ Possible fix, define
│ convert(::Type{Union{}}, ::Any)
│
│ func = parameters_vs_group (generic function with 2 methods)
│ backtrace =
│
│ Stacktrace:
│ [1] setindex!(A::Vector{Union{}}, x::Missing, i1::Int64)
│ @ Base ./array.jl:969
│ [2] _unsafe_copyto!(dest::Vector{Union{}}, doffs::Int64, src::Vector{Missing}, soffs::Int64, n::Int64)
│ @ Base ./array.jl:250
│ [3] unsafe_copyto!
│ @ ./array.jl:304 [inlined]
│ [4] _copyto_impl!
│ @ ./array.jl:327 [inlined]
│ [5] copyto!
│ @ ./array.jl:314 [inlined]
│ [6] copyto!
│ @ ./array.jl:339 [inlined]
│ [7] _collect
│ @ ./array.jl:644 [inlined]
│ [8] collect
│ @ ./array.jl:642 [inlined]
│ [9] (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
│ [10] CategoricalArray
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:157 [inlined]
│ [11] _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
│ [12] _convert
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:354 [inlined]
│ [13] #_#34
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:253 [inlined]
│ [14] CategoricalArray
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:249 [inlined]
│ [15] #_#35
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:260 [inlined]
│ [16] CategoricalArray
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:260 [inlined]
│ [17] #CategoricalVector#38
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/CategoricalArrays/0yLZN/src/array.jl:273 [inlined]
│ [18] (::PlottingUtilities.var"#func#72"{PlottingUtilities.var"#func#66#73"{typeof(Makie.violin!)}})(plot::MakieCore.Combined{NCAUtilities.parameters_vs_group, Tuple{NCAReport}}, xs::CategoricalArrays.CategoricalVector{Int64, UInt32, Int64, CategoricalArrays.CategoricalValue{Int64, UInt32}, Union{}}, ys::Vector{Missing}; kws::Base.Pairs{Symbol, Observables.Observable{Any}, NTuple{4, Symbol}, NamedTuple{(:color, :colormap, :colorrange, :cycle), NTuple{4, Observables.Observable{Any}}}})
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:1242
│ [19] plot!(pg::MakieCore.Combined{NCAUtilities.parameters_vs_group, Tuple{NCAReport}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_vs_group.jl:63
│ [20] plot!(scene::Makie.Scene, P::Type{MakieCore.Combined{NCAUtilities.parameters_vs_group, Tuple{NCAReport}}}, attributes::MakieCore.Attributes, input::Tuple{Observables.Observable{NCAReport}}, args::Observables.Observable{Tuple{NCAReport}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:432
│ [21] plot!(scene::Makie.Scene, P::Type{MakieCore.Combined{NCAUtilities.parameters_vs_group}}, attributes::MakieCore.Attributes, args::NCAReport; kw_attributes::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:344
│ [22] plot!
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/interfaces.jl:311 [inlined]
│ [23] plot!(la::Makie.Axis, P::Type{MakieCore.Combined{NCAUtilities.parameters_vs_group}}, attributes::MakieCore.Attributes, args::NCAReport; kw_attributes::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:paginate, :parameter, :group), Tuple{Bool, Symbol, String}}})
│ @ Makie ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/Makie/iECbF/src/makielayout/blocks/axis.jl:792
│ [24] plot(P::Type{MakieCore.Combined{NCAUtilities.parameters_vs_group}}, fig::GridLayoutBase.GridPosition, report::NCAReport; axis::NamedTuple{(), Tuple{}}, keywords::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:paginate, :parameter, :group), Tuple{Bool, Symbol, String}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_vs_group.jl:89
│ [25] (::NCAUtilities.var"#76#80"{NamedTuple{(:paginate, :parameter, :group), Tuple{Bool, SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}, SubArray{String, 1, Vector{String}, Tuple{UnitRange{Int64}}, true}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport})(figpos::GridLayoutBase.GridPosition, group::String, parameter::Symbol)
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_vs_group.jl:125
│ [26] (::PlottingUtilities.var"#14#15"{Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, NCAUtilities.var"#76#80"{NamedTuple{(:paginate, :parameter, :group), Tuple{Bool, SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}, SubArray{String, 1, Vector{String}, Tuple{UnitRange{Int64}}, true}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport}, Makie.Figure, SubArray{String, 1, Vector{String}, Tuple{UnitRange{Int64}}, true}, SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}})()
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:154
│ [27] #_with_updates_suspended#19
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:187 [inlined]
│ [28] _with_updates_suspended
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:183 [inlined]
│ [29] #facet#13
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:150 [inlined]
│ [30] facet
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:149 [inlined]
│ [31] (::NCAUtilities.var"#75#79"{NamedTuple{(:fontsize, :resolution), Tuple{Int64, Tuple{Int64, Int64}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport})(keywords::NamedTuple{(:paginate, :parameter, :group), Tuple{Bool, SubArray{Symbol, 1, Vector{Symbol}, Tuple{UnitRange{Int64}}, true}, SubArray{String, 1, Vector{String}, Tuple{UnitRange{Int64}}, true}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_vs_group.jl:124
│ [32] pagination(func::NCAUtilities.var"#75#79"{NamedTuple{(:fontsize, :resolution), Tuple{Int64, Tuple{Int64, Int64}}}, NamedTuple{(), Tuple{}}, UnionAll, NCAReport}, keywords::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:paginate, :parameter), Tuple{Bool, Symbol}}}; limit::Int64, vars::Base.Pairs{Symbol, Vector, Tuple{Symbol, Symbol}, NamedTuple{(:group, :parameter), Tuple{Vector{String}, Vector{Symbol}}}})
│ @ PlottingUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/PlottingUtilities/gVywA/src/convert.jl:105
│ [33] plot(P::Type{MakieCore.Combined{NCAUtilities.parameters_vs_group}}, report::NCAReport; figure::NamedTuple{(:fontsize, :resolution), Tuple{Int64, Tuple{Int64, Int64}}}, axis::NamedTuple{(), Tuple{}}, keywords::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:paginate, :parameter), Tuple{Bool, Symbol}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_vs_group.jl:122
│ [34] plot
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/recipes/parameters_vs_group.jl:96 [inlined]
│ [35] #parameters_vs_group#65
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/6sckc/src/recipes.jl:34 [inlined]
│ [36] parameters_vs_group
│ @ ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/MakieCore/6sckc/src/recipes.jl:33 [inlined]
│ [37] (::NCAUtilities.var"#162#169"{NCAUtilities.var"#162#163#170"{typeof(parameters_vs_group), Int64, Tuple{Int64, Int64}}})(args::NCAReport; kws::Base.Pairs{Symbol, Symbol, Tuple{Symbol}, NamedTuple{(:parameter,), Tuple{Symbol}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/reports/reports.jl:141
│ [38] 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::Base.Pairs{Symbol, String, Tuple{Symbol}, NamedTuple{(:title,), Tuple{String}}})
│ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/reports/reports.jl:178
│ [39] top-level scope
│ @ introduction.md:208
│ [40] eval
│ @ ./boot.jl:370 [inlined]
│ [41] #58
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:754 [inlined]
│ [42] cd(f::Documenter.var"#58#60"{Module, Expr}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [43] (::Documenter.var"#57#59"{Documenter.Page, Module, Expr})()
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:753
│ [44] (::IOCapture.var"#4#7"{DataType, Documenter.var"#57#59"{Documenter.Page, Module, Expr}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}, IOContext{Base.PipeEndpoint}})()
│ @ IOCapture ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Rzdxd/src/IOCapture.jl:161
│ [45] with_logstate(f::Function, logstate::Any)
│ @ Base.CoreLogging ./logging.jl:514
│ [46] with_logger
│ @ ./logging.jl:626 [inlined]
│ [47] capture(f::Documenter.var"#57#59"{Documenter.Page, Module, Expr}; rethrow::Type, color::Bool, passthrough::Bool, capture_buffer::IOBuffer)
│ @ IOCapture ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/IOCapture/Rzdxd/src/IOCapture.jl:158
│ [48] runner(#unused#::Type{Documenter.Expanders.ExampleBlocks}, node::MarkdownAST.Node{Nothing}, page::Documenter.Page, doc::Documenter.Document)
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:752
│ [49] dispatch(::Type{Documenter.Expanders.ExpanderPipeline}, ::MarkdownAST.Node{Nothing}, ::Vararg{Any})
│ @ Documenter.Selectors ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/utilities/Selectors.jl:170
│ [50] expand(doc::Documenter.Document)
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/expander_pipeline.jl:22
│ [51] runner(#unused#::Type{Documenter.Builder.ExpandTemplates}, doc::Documenter.Document)
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/builder_pipeline.jl:222
│ [52] dispatch(#unused#::Type{Documenter.Builder.DocumentPipeline}, x::Documenter.Document)
│ @ Documenter.Selectors ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/utilities/Selectors.jl:170
│ [53] #85
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/makedocs.jl:248 [inlined]
│ [54] withenv(::Documenter.var"#85#87"{Documenter.Document}, ::Pair{String, Nothing}, ::Vararg{Pair{String, Nothing}})
│ @ Base ./env.jl:197
│ [55] #84
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/makedocs.jl:247 [inlined]
│ [56] cd(f::Documenter.var"#84#86"{Documenter.Document}, dir::String)
│ @ Base.Filesystem ./file.jl:112
│ [57] makedocs(; debug::Bool, format::Documenter.HTMLWriter.HTML, kwargs::Base.Pairs{Symbol, Any, NTuple{13, Symbol}, NamedTuple{(:plugins, :modules, :doctest, :warnonly, :clean, :draft, :linkcheck, :linkcheck_timeout, :linkcheck_ignore, :sitename, :authors, :remotes, :pages), Tuple{Vector{CitationBibliography}, Vector{Module}, Bool, Vector{Symbol}, Bool, Bool, Bool, Int64, Vector{Regex}, String, String, Nothing, Vector{Any}}}})
│ @ Documenter ~/_work/PumasDocs.jl/PumasDocs.jl/sysimage_directory/julia_depot/packages/Documenter/2OZOh/src/makedocs.jl:247
│ [58] top-level scope
│ @ ~/_work/PumasDocs.jl/PumasDocs.jl/docs/make.jl:71
│ [59] include(mod::Module, _path::String)
│ @ Base ./Base.jl:457
│ [60] exec_options(opts::Base.JLOptions)
│ @ Base ./client.jl:307
└ @ NCAUtilities ~/_work/PumasSystemImages/PumasSystemImages/julia_depot/packages/NCAUtilities/Wodjc/src/reports/reports.jl:151
[ Info: Gathering System Information
[ Info: Ordering Report Sections
You can view the report generated here.