Spike and slab prior

A simple, one-variable Bayesian linear regression model using a spike and slab prior.

# this is smoothed-out approximation to the true spike-and-slab prior that
# replaces the discrete indicator variable with a continuous variable.
# 'spikiness' sets the amount of spike on this, values closer to 0 should be
# closer to the discrete version, but may take longer to converge. Values
# greater than 1 will break everything. Don't do that.
spike_and_slab <- function (spikiness = 0.1, slabiness = 10, dim = NULL) {
  stopifnot(spikiness < 1)
  slab <- normal(0, slabiness, dim = dim)
  spike <- gamma(spikiness, spikiness, dim = dim)
  spike * slab
}

# variables & priors
int  <- variable()
sd   <- inverse_gamma(1, 1)
coef <- spike_and_slab()

# linear predictor
mu <- int + coef * attitude$complaints

# observation model
distribution(attitude$rating) <- normal(mu, sd)


Try the greta package in your browser

Any scripts or data that you put into this service are public.

greta documentation built on Sept. 8, 2022, 5:10 p.m.