Binomial Models

Binomial models are appropriate for data consisting of successes y_i out of N_i trials. Each cluster k has a success probability p_k, and the likelihood for observation i in cluster k is:

y_i | p_k, N_i ~ Binomial(N_i, p_k)

The number of trials N can be a single integer shared across all observations (scalar) or a per-observation vector.

All Binomial models use a conjugate Beta prior on p_k, which allows analytical marginalisation.


BinomialClusterProbMarg

Cluster probabilities p_k are integrated out analytically via Beta–Binomial conjugacy. Inference uses conjugate Gibbs sampling. State holds only c::Vector{Int}. See the API Reference for full type documentation.

Example:

data = CountDataWithTrials(y, N, D)
priors = BinomialClusterProbMargPriors(1.0, 1.0)

samples = mcmc(BinomialClusterProbMarg(), data, ddcrp, priors, ConjugateProposal(); opts=opts)

BinomialClusterProb

Explicit cluster probabilities p_k sampled via RJMCMC. Use this when you need posterior distributions over the cluster success probabilities themselves. State holds a p_dict::Dict{Vector{Int},Float64}; priors are p_a, p_b for Beta(p_a, p_b). See the API Reference for full type documentation.

Example:

# Scalar N: same number of trials for every observation
data = CountDataWithTrials(y, 10, D)

# Vector N: different number of trials per observation
data = CountDataWithTrials(y, N_vec, D)

ddcrp = DDCRPParams(0.5, 1.0)
priors = BinomialClusterProbPriors(1.0, 1.0)   # Beta(1,1) = Uniform prior
opts = MCMCOptions(n_samples=3000)

samples, diag = mcmc(
    BinomialClusterProb(), data, ddcrp, priors, LogNormalMomentMatch(0.5);
    fixed_dim_proposal=WeightedMean(), opts=opts
)

Simulation

See simulate_binomial_data in the API Reference.