Hi
I want to use the horsehoe prior with a nonlinear model, but I suspect that it also regularizing the intercept parameter when it shouldn’t.
Can somebody check if I’m doing something wrong or if it is an issue with brms
?
I demonstrate the issue with 2 toy data sets with the only difference that there is a bias in the second dat set translating in a large intercept value.
library(brms)
set.seed(123)
Y = sample(c(0,1),100,replace= TRUE)
a = rnorm(Y,Y)
b = rnorm(Y,Y)
c = rnorm(Y,Y)
d = rnorm(Y,Y)
e = rnorm(Y,Y)
f = rnorm(Y,Y)
dd1 = data.frame(Y,a,b,c,d,e,f)
## same data with added bias
dd2 = dd1
dd2[-1] = dd2[-1] + 10
Now I fit a linear brms
model with horseshoe prior
fit1 = brm(Y~., family = bernoulli("logit"), data = dd1,prior = prior(horseshoe())
, seed = 1,eta = 1,adapt_engaged = FALSE, init = 0, algorithm = 'meanfield')
fit2 = brm(Y~., family = bernoulli("logit"), data = dd2,prior = prior(horseshoe())
, seed = 1,eta = 1,adapt_engaged = FALSE, init = 0, algorithm = 'meanfield')
cbind(fixef(fit1)[,1],fixef(fit2)[,1])
Indeed, all parameter estimates are the same except the intercept
Intercept -4.1621522 -84.3192850
a 1.0886389 1.0886389
b 1.3354069 1.3354069
c 1.5518533 1.5518533
d 1.4961902 1.4961902
e 0.8681363 0.8681363
f 1.6754869 1.6754869
Now, I fit the same data sets with a nonlinear model
form <- bf(Y ~ log(inv_logit(eta)), eta ~ a + b + c + d + e + f, nl = TRUE)
fit3 = brm(form, family = bernoulli("logit"), data = dd1,prior = set_prior(horseshoe(), nlpar = 'eta')
, seed = 1,eta = 1,adapt_engaged = FALSE, init = 0, algorithm = 'meanfield')
fit4 = brm(form, family = bernoulli("logit"), data = dd2,prior = set_prior(horseshoe(), nlpar = 'eta')
, seed = 1,eta = 1,adapt_engaged = FALSE, init = 0, algorithm = 'meanfield')
cbind(fixef(fit3)[,1],fixef(fit4)[,1])
All parameters are different.
eta_Intercept -1.9768419 0.03578799
eta_a 0.8661051 0.39018095
eta_b 2.2615091 0.42025410
eta_c 1.7398894 0.66441369
eta_d 2.0722380 0.31776399
eta_e 1.2938160 0.23838384
eta_f 2.0037543 0.19358062
To me, it looks like if the intercept is also shrunk by the horseshoe prior.
How can I prevent that? Am I specifying the model correctly?
Thanks in advance
- Operating System: Linux
- brms Version: 2.7