Hi,Guys:
I have been trying to generate random values from horseshoe prior for a plotting purpose…
Yet they all seems a little bit off compared to the original plots in Carvalho et al. (2009)Handling Sparsity via the Horseshoe.
Some of the functions that I have used are rhs(n,lambda,tau)
and dhs(x,lambda,tau)
from library(LaplacesDemon)
where I provided the parameter values for local shrinkage and global shrinkage…
Could someone provide some insights why this is happening?
Any helps will be appreciated.
Thanks!
I believe that is because Carvalho et al. are showing a composite probability density across many draws of the local lambda
parameter. Each individual component of the horseshoe (i.e. for each term it is applied to) is a normal distribution. Only when you stack them up do you get the spike and slab appearance.
Here’s one way to generate that look.
library(dplyr, warn.conflicts = FALSE)
library(LaplacesDemon)
library(ggplot2)
# plot over this range
xseq <- seq(-5, 5, length.out = 500)
# how many terms for the horseshoe
N <- 100
# generate N densities, drawing the lambda parameter from a half-cauchy
denslist <- purrr::map(abs(rcauchy(N, 0, 1)), ~dhs(xseq, lambda=.x, tau=0.5))
# add them all together and divide by the number of draws
dens <- Reduce(`+`, denslist)/N
data.frame(x=xseq, density=dens) %>%
ggplot(aes(x, density)) +
geom_line()