How do I get labels to show (5%, 95% and mean values) on the ppc plot/?

Hello,

I ran a GLM using CMDSTANPY. I’ve ran my data sample through it and got the posterior predictive samples. How do I pull out the 5%, 95% and mean of the posterior predictive samples like I get when plotting my posterior parameters?

1 Like

Like getting those values from summary DataFrame (Set hdi_prob to 0.95) or do you want to calculate those values manually (np.quantile(idata.posterior_predictive.theta, [0.05, 0.95]) and np.mean(idata.posterior_predictive.theta))?

1 Like

Getting those values from the posterior predictive. Specifically, loss_ratio_ppc from the generated quantities block.

functions {
real half_normal_rng(real mu, real sigma) {
    real p = normal_cdf(0, mu, sigma);  // cdf for bounds
    real u = uniform_rng(p, 1);
    return (sigma * inv_Phi(u)) + mu;  // inverse cdf for value
}
}

data {
    int<lower=1> n;           // number of observations
    vector<lower=0>[n] loss_ratio; //target
    vector[n] log_cancellation;  //monthly cancel rate
    int<lower=1> p;
}

parameters {
    real alpha;               // intercept
    real beta;                // slope
    real<lower=0> sigma;      // scatter
}

transformed parameters {
    // Any variable declared here is part of the output produced for draws.
    vector[n] mu;
    mu = alpha + beta * log_cancellation;
}

model {
    // priors
    alpha ~ normal(0,5);  // prior for intercept
    beta ~ normal(0,5);     // prior for cancellation rate
    sigma ~ normal(0,5);    // prior for sigma
    // likelihood
    for (i in 1:n) {
    loss_ratio[i] ~ normal(mu, sigma) T[0,];
}
}

generated quantities {
    vector[p] loss_ratio_ppc;
    for (i in 1:p) {loss_ratio_ppc[i] = half_normal_rng(mu[i], sigma);}
}

I tried the command print(inf_data.quantiles(q='posterior_predictive')) but hat doesn’t produce anything.

How did you created the inferencedata object? Did you specify ppc values?

See

https://arviz-devs.github.io/arviz/getting_started/CreatingInferenceData.html

1 Like

Yes i converted to inference data. When I put said inference data object inside a print statement, I get the following output:

Inference data with groups:
	> posterior
	> posterior_predictive
	> sample_stats
	> observed_data

Which led me to try the inf_data.quantiles(q=posterior_predictive) which didn’t work.

1 Like

Try

inf_data.posterior_predictive.quantile(q=[0.05,0.95])
1 Like

You might also want to take a look at this page of the ArviZ documentation: Working with InferenceData — ArviZ dev documentation