import Random
import TuringModels
using CSV
using DataFrames
using StatsFuns
using Turing
Random.seed!(1)
file_path = joinpath(TuringModels.project_root, "data", "UCBadmit.csv")
df = CSV.read(file_path, DataFrame; delim=';')
12×5 DataFrame
Row │ dept gender admit reject applications
│ String1 String7 Int64 Int64 Int64
─────┼───────────────────────────────────────────────
1 │ A male 512 313 825
2 │ A female 89 19 108
3 │ B male 353 207 560
4 │ B female 17 8 25
5 │ C male 120 205 325
6 │ C female 202 391 593
7 │ D male 138 279 417
8 │ D female 131 244 375
9 │ E male 53 138 191
10 │ E female 94 299 393
11 │ F male 22 351 373
12 │ F female 24 317 341
@model function m_pois(admit, reject)
α₁ ~ Normal(0,100)
α₂ ~ Normal(0,100)
for i ∈ 1:length(admit)
λₐ = exp(α₁)
λᵣ = exp(α₂)
admit[i] ~ Poisson(λₐ)
reject[i] ~ Poisson(λᵣ)
end
end;
chns = sample(m_pois(df.admit, df.reject), NUTS(), 1000)
Chains MCMC chain (1000×14×1 Array{Float64, 3}):
Iterations = 501:1:1500
Number of chains = 1
Samples per chain = 1000
Wall duration = 4.3 seconds
Compute duration = 4.3 seconds
parameters = α₁, α₂
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 ess_per_sec
Symbol Float64 Float64 Float64 Float64 Float64 Float64 Float64
α₁ 4.9864 0.0250 0.0008 0.0008 765.8630 1.0005 178.2735
α₂ 5.4419 0.0184 0.0006 0.0007 876.9997 0.9993 204.1433
Quantiles
parameters 2.5% 25.0% 50.0% 75.0% 97.5%
Symbol Float64 Float64 Float64 Float64 Float64
α₁ 4.9370 4.9705 4.9848 5.0032 5.0363
α₂ 5.4052 5.4302 5.4417 5.4542 5.4784
using StatsPlots
StatsPlots.plot(chns)
"/home/runner/work/TuringModels.jl/TuringModels.jl/__site/assets/models/admit-reject/code/output/chns.svg"
m_10_yyt_result = "
mean sd 5.5% 94.5% n_eff Rhat
a1 4.99 0.02 4.95 5.02 2201 1
a2 5.44 0.02 5.41 5.47 2468 1
";