use ndarray::Array2;
use polya_gamma::regression::GibbsLogit;
use rand::{Rng, SeedableRng};
use statrs::distribution::Normal;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
let n = 10_000;
let p = 3;
let mut rng = rand_chacha::ChaCha8Rng::seed_from_u64(42);
let x = Array2::from_shape_fn((n, p), |_| rng.sample(Normal::standard()));
let true_beta = ndarray::array![0.5, -1.0, 2.0];
let probs = x.dot(&true_beta).mapv(|z| 1.0 / (1.0 + (-z).exp()));
let y = probs.mapv(|p| if rng.gen_bool(p) { 1.0 } else { 0.0 });
let prior_variance = 100.0; let n_chains = 4;
let burnin = 500;
let samples = 1000;
let seed = 42;
let model = GibbsLogit::new(x, y, prior_variance, n_chains, seed);
let results = model.run(burnin, samples, Some(true_beta.to_vec()))?;
results.summary();
println!("\nDetailed results:");
println!("----------------");
println!("{}", results.run_stats);
Ok(())
}