Turing Essentials - 1
Turing is a framework of Julia to work with Probabilistic models
• 9 min read
using Random
# Load a plotting library.
using Plots
# Load Turing and MCMCChains.
using Turing, MCMCChains
# Load the distributions library.
using Distributions
# Load StatsPlots for density plots.
using StatsPlots
coin_flips = rand(Bernoulli(0.7), 100)
100-element Vector{Bool}: 1 0 1 1 1 1 1 1 1 0 1 1 0 ⋮ 0 0 1 1 0 1 1 1 1 1 1 1
@model function coin(coin_flips)
p ~ Beta(1, 1)
for i ∈ 1:length(coin_flips)
coin_flips[i] ~ Bernoulli(p)
end
end;
#\in<tab> = ∈
chain_coin = sample(coin(coin_flips), MH(), 100) #single chain
Sampling: 100%|█████████████████████████████████████████| Time: 0:00:02
Chains MCMC chain (100×2×1 Array{Float64, 3}): Iterations = 1:1:100 Number of chains = 1 Samples per chain = 100 Wall duration = 6.07 seconds Compute duration = 6.07 seconds parameters = p internals = lp Summary Statistics parameters mean std naive_se mcse ess rhat es ⋯ Symbol Float64 Float64 Float64 Float64 Float64 Float64 ⋯ p 0.7468 0.0597 0.0060 0.0091 29.1777 1.0600 ⋯ 1 column omitted Quantiles parameters 2.5% 25.0% 50.0% 75.0% 97.5% Symbol Float64 Float64 Float64 Float64 Float64 p 0.6117 0.7381 0.7623 0.7623 0.8284
MCMCThreads(): uses multithread stuff with Threads.jl
MCMCDistributed(): uses multiprocesses stuff with Distributed.jl and uses the MPI – Message Passing Interface
#We can Set enviornment variable "export JULIA_NUM_THREADS=4" in bashrc file to control number of threads
Threads.nthreads()
1
nchains = 3
chains = sample(coin(coin_flips), NUTS(), MCMCThreads(), 100, nchains)
┌ Warning: Only a single thread available: MCMC chains are not sampled in parallel └ @ AbstractMCMC /home/patel_zeel/.julia/packages/AbstractMCMC/6aLyN/src/sample.jl:292 ┌ Info: Found initial step size │ ϵ = 0.8 └ @ Turing.Inference /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/hmc.jl:188 ┌ Warning: The current proposal will be rejected due to numerical error(s). │ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false) └ @ AdvancedHMC /home/patel_zeel/.julia/packages/AdvancedHMC/w90s5/src/hamiltonian.jl:47 ┌ Warning: The current proposal will be rejected due to numerical error(s). │ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false) └ @ AdvancedHMC /home/patel_zeel/.julia/packages/AdvancedHMC/w90s5/src/hamiltonian.jl:47 ┌ Info: Found initial step size │ ϵ = 0.8 └ @ Turing.Inference /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/hmc.jl:188 ┌ Warning: The current proposal will be rejected due to numerical error(s). │ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false) └ @ AdvancedHMC /home/patel_zeel/.julia/packages/AdvancedHMC/w90s5/src/hamiltonian.jl:47 ┌ Info: Found initial step size │ ϵ = 0.8 └ @ Turing.Inference /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/hmc.jl:188 ┌ Warning: The current proposal will be rejected due to numerical error(s). │ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false) └ @ AdvancedHMC /home/patel_zeel/.julia/packages/AdvancedHMC/w90s5/src/hamiltonian.jl:47
Chains MCMC chain (100×13×3 Array{Float64, 3}): Iterations = 51:1:150 Number of chains = 3 Samples per chain = 100 Wall duration = 0.01 seconds Compute duration = 0.01 seconds parameters = p internals = lp, n_steps, is_accept, acceptance_rate, log_density, hamiltonian_energy, hamiltonian_energy_error, max_hamiltonian_energy_error, tree_depth, numerical_error, step_size, nom_step_size Summary Statistics parameters mean std naive_se mcse ess rhat es ⋯ Symbol Float64 Float64 Float64 Float64 Float64 Float64 ⋯ p 0.6890 0.0480 0.0028 0.0048 91.5667 1.0340 ⋯ 1 column omitted Quantiles parameters 2.5% 25.0% 50.0% 75.0% 97.5% Symbol Float64 Float64 Float64 Float64 Float64 p 0.5949 0.6567 0.6887 0.7228 0.7723
Shape of chain: nsample $\times$ n_para_properties $\times$ nchains
- Access first chain
chains[:,:,1]
Chains MCMC chain (100×13×1 Array{Float64, 3}): Iterations = 51:1:150 Number of chains = 1 Samples per chain = 100 Wall duration = 0.01 seconds Compute duration = 0.01 seconds parameters = p internals = lp, n_steps, is_accept, acceptance_rate, log_density, hamiltonian_energy, hamiltonian_energy_error, max_hamiltonian_energy_error, tree_depth, numerical_error, step_size, nom_step_size Summary Statistics parameters mean std naive_se mcse ess rhat es ⋯ Symbol Float64 Float64 Float64 Float64 Float64 Float64 ⋯ p 0.6833 0.0526 0.0053 0.0074 36.6413 1.0344 ⋯ 1 column omitted Quantiles parameters 2.5% 25.0% 50.0% 75.0% 97.5% Symbol Float64 Float64 Float64 Float64 Float64 p 0.5892 0.6503 0.6811 0.7185 0.7745
methodswith(MCMCChains.Chains) #to know methods name which we can apply on chain object
78-element Vector{Method}:
- getiterator(chn::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/tables.jl:67
- isiterable(::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/tables.jl:66
- sample(rng::AbstractRNG, chn::Chains, wv::AbstractWeights, n) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/sampling.jl:24
- sample(rng::AbstractRNG, chn::Chains, n; replace, ordered) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/sampling.jl:14
- sample(chn::Chains, wv::AbstractWeights, n) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/sampling.jl:10
- sample(chn::Chains, n; kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/sampling.jl:9
- autocor(chains::Chains; lags, demean, append_chains, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:11
- chains(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:497
- chainscat(c::Chains, cs::Chains...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:738
- describe(io::IO, chains::Chains; q, etype, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:162
- describe(c::Chains; args...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:152
- dic(chain::Chains, logpdf::Function) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/modelstats.jl:34
- ess_rhat(chains::Chains; sections, duration, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/ess.jl:9
- get_params(c::Chains; flatten) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:320
- gewekediag(chains::Chains; sections, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/gewekediag.jl:1
- group(chains::Chains, name::Union{String, Symbol}) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:157
- heideldiag(chains::Chains; sections, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/heideldiag.jl:1
- hpd(chn::Chains; alpha, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:186
- mean(chains::Chains; kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:280
- mean(chn::Chains, syms::AbstractVector{T} where T) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:298
- mean(chn::Chains, syms) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:296
- namesingroup(chains::Chains, sym::String) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:143
- namesingroup(chains::Chains, sym::Symbol) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:144
- quantile(chains::Chains; q, append_chains, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:201
- rafterydiag(chains::Chains; sections, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/rafterydiag.jl:1
- replacenames(chains::Chains, dict::AbstractDict) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:855
- replacenames(chains::Chains, old_new::Pair...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:856
- resetrange(chains::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:490
- rstar(rng::AbstractRNG, classif::MLJModelInterface.Supervised, chn::Chains; kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/rstar.jl:46
- rstar(classif::MLJModelInterface.Supervised, chn::Chains; kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/rstar.jl:40
- sections(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:543
- set_section(chains::Chains, namemap) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:687
- setinfo(c::Chains, n::NamedTuple) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:674
- setrange(chains::Chains, range::AbstractVector{Int64}) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:466
- sort_sections(chn::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/constructors.jl:1
- summarize(chains::Chains, funs...; sections, func_names, append_chains, name, additional_df) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/summarize.jl:136
- summarystats(chains::Chains; sections, append_chains, method, maxlag, etype, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:243
- cor(chains::Chains; sections, append_chains, kwargs...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/stats.jl:41
- predict(rng::AbstractRNG, model::DynamicPPL.Model, chain::Chains; include_all) in Turing.Inference at /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/Inference.jl:534
- predict(model::DynamicPPL.Model, chain::Chains; kwargs...) in Turing.Inference at /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/Inference.jl:531
- get(c::Chains; section, flatten) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:267
- get(c::Chains, v::Symbol; flatten) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:246
- get(c::Chains, vs::Vector{Symbol}; flatten) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:222
- cat(c::T, cs::T...; dims) where T<:Chains in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:730
- cat(c::Chains, cs::Chains...; dims) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:729
- length(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:342
- sort(c::Chains; lt) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:642
- resume(chain::Chains, args...; kwargs...) in Turing.Inference at /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/Inference.jl:398
- resume(rng::AbstractRNG, chain::Chains, args...; progress, kwargs...) in Turing.Inference at /home/patel_zeel/.julia/packages/Turing/rl6ku/src/inference/Inference.jl:402
- isiterabletable(::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/tables.jl:71
- convert(::Type{Array}, chn::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:347
- first(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:343
- getindex(c::Chains, v::AbstractVector{Symbol}) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:170
- getindex(c::Chains, v::Symbol) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:169
- getindex(c::Chains, v::AbstractVector{String}) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:167
- getindex(c::Chains, v::String) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:166
- getindex(c::Chains, i::AbstractVector{var"#s17"} where var"#s17"<:Integer) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:164
- getindex(c::Chains, i::Integer) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:163
- getindex(chn::Chains, i, j, k) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:172
- hcat(c::T, cs::T...) where T<:Chains in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:736
- hcat(c::Chains, cs::Chains...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:735
- keys(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:339
- last(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:345
- lastindex(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:195
- lastindex(c::Chains, d::Integer) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:196
- names(chains::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:506
- names(chains::Chains, section::Symbol) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:513
- names(c::Chains, sections) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:520
- range(chains::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:457
- setindex!(c::Chains, v, i...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:194
- show(io::IO, chains::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:324
- show(io::IO, mime::MIME{Symbol("text/plain")}, chains::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:328
- size(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:340
- size(c::Chains, ind) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:341
- step(c::Chains) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:344
- vcat(c::T, cs::T...) where T<:Chains in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:733
- vcat(c::Chains, cs::Chains...) in MCMCChains at /home/patel_zeel/.julia/packages/MCMCChains/ECz6m/src/chains.jl:732
- write(f::AbstractString, c::Chains) in MCMCChains at deprecated.jl:70</ul>
</div>
</div>
</div>
</div>
</div>
- Access first 5 samples of p from all 3 chains
chains[1:5,:p,:]
2-dimensional AxisArray{Float64,2,...} with axes: :iter, 51:1:55 :chain, 1:3 And data, a 5×3 Matrix{Float64}: 0.597287 0.677056 0.659935 0.680261 0.709787 0.659935 0.680048 0.746033 0.659935 0.659466 0.713113 0.651283 0.649966 0.746687 0.636297
- Print samples from all chains
chains[:p]
2-dimensional AxisArray{Float64,2,...} with axes: :iter, 51:1:150 :chain, 1:3 And data, a 100×3 Matrix{Float64}: 0.597287 0.677056 0.659935 0.680261 0.709787 0.659935 0.680048 0.746033 0.659935 0.659466 0.713113 0.651283 0.649966 0.746687 0.636297 0.676777 0.741049 0.627942 0.726003 0.751696 0.628698 0.772317 0.668888 0.628698 0.710244 0.656368 0.584906 0.705667 0.723956 0.637726 0.732093 0.701156 0.675021 0.715063 0.643947 0.685289 0.715063 0.623047 0.611548 ⋮ 0.673036 0.744911 0.746093 0.721274 0.653399 0.743556 0.681326 0.737528 0.630129 0.612888 0.701839 0.690851 0.6675 0.624462 0.690053 0.659205 0.610417 0.690053 0.606711 0.646336 0.692544 0.628168 0.675109 0.758224 0.641727 0.71168 0.758224 0.641727 0.698513 0.740335 0.736012 0.683719 0.680172 0.778864 0.683719 0.660831
- Print log-probability
chains[1:5,:lp,1]
1-dimensional AxisArray{Float64,1,...} with axes: :iter, 51:1:55 And data, a 5-element Vector{Float64}: -64.78584955704565 -62.70255084217615 -62.70413989717133 -62.953513152658644 -63.130785070454394
chain_coin_parallel = chains plot( traceplot(chain_coin_parallel, title="traceplot"), meanplot(chain_coin_parallel, title="meanplot"), density(chain_coin_parallel, title="density"), histogram(chain_coin_parallel, title="histogram"), mixeddensity(chain_coin_parallel, title="mixeddensity"), autocorplot(chain_coin_parallel, title="autocorplot"), dpi=300, size=(840, 600) )
┌ Info: Precompiling GR_jll [d2c73de3-f751-5644-a686-071e5b155ba9] └ @ Base loading.jl:1342 ┌ Warning: The call to compilecache failed to create a usable precompiled cache file for xkbcommon_jll [d8fb68d0-12a3-5cfd-a85a-d49703b185fd] │ exception = Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file. └ @ Base loading.jl:1055 ┌ Warning: The call to compilecache failed to create a usable precompiled cache file for Qt5Base_jll [ea2cea3b-5b76-57ae-a6ef-0a8af62496e1] │ exception = Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file. └ @ Base loading.jl:1055 ┌ Warning: The call to compilecache failed to create a usable precompiled cache file for xkbcommon_jll [d8fb68d0-12a3-5cfd-a85a-d49703b185fd] │ exception = Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file. └ @ Base loading.jl:1055 ┌ Warning: The call to compilecache failed to create a usable precompiled cache file for GR_jll [d2c73de3-f751-5644-a686-071e5b155ba9] │ exception = ErrorException("Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file.") └ @ Base loading.jl:1055 ┌ Info: Precompiling Qt5Base_jll [ea2cea3b-5b76-57ae-a6ef-0a8af62496e1] └ @ Base loading.jl:1342 ┌ Warning: The call to compilecache failed to create a usable precompiled cache file for xkbcommon_jll [d8fb68d0-12a3-5cfd-a85a-d49703b185fd] │ exception = Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file. └ @ Base loading.jl:1055 ┌ Warning: The call to compilecache failed to create a usable precompiled cache file for Qt5Base_jll [ea2cea3b-5b76-57ae-a6ef-0a8af62496e1] │ exception = ErrorException("Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file.") └ @ Base loading.jl:1055 ┌ Info: Precompiling xkbcommon_jll [d8fb68d0-12a3-5cfd-a85a-d49703b185fd] └ @ Base loading.jl:1342
┌ Warning: The call to compilecache failed to create a usable precompiled cache file for xkbcommon_jll [d8fb68d0-12a3-5cfd-a85a-d49703b185fd] │ exception = ErrorException("Required dependency Xorg_xkbcomp_jll [35661453-b289-5fab-8a00-3d9160c6a3a4] failed to load from a cache file.") └ @ Base loading.jl:1055
coin_flips = 10000
10000
@model function coin_vectorized(coin_flips) p ~ Beta(1, 1) #using dot notation coin_flips .~ Bernoulli.(p) end;
chain_coin_vect = sample(coin(coin_flips), MH(), 1000)
Chains MCMC chain (1000×2×1 Array{Float64, 3}): Iterations = 1:1:1000 Number of chains = 1 Samples per chain = 1000 Wall duration = 0.02 seconds Compute duration = 0.02 seconds parameters = p internals = lp Summary Statistics parameters mean std naive_se mcse ess rhat es ⋯ Symbol Float64 Float64 Float64 Float64 Float64 Float64 ⋯ p 0.4016 0.0000 0.0000 0.0000 2.6720 0.9990 ⋯ 1 column omitted Quantiles parameters 2.5% 25.0% 50.0% 75.0% 97.5% Symbol Float64 Float64 Float64 Float64 Float64 p 0.4016 0.4016 0.4016 0.4016 0.4016