Thanks so much ! , this is very very clear. Is it the case then that the corresponding non-centered model using different priors for different features is then just given by:
def model_factory(X, y, site_shared, n_site, n_features=None):
if n_features is None:
n_features = X.shape[-1]
with pm.Model() as model:
mu_beta = pm.Normal('mu_beta', mu=0., sd=1,shape=(n_features,1))
sigma_beta = pm.HalfCauchy('sigma_beta', 5,shape=(n_features,1))
a = pm.Normal('a', mu=0., sd=1)
b = pm.Normal('b', mu=0, sd=1, shape=(n_features, n_site))
betas = mu_beta + sigma_beta * b
y_hat = a + tt.dot(X, betas[:, site_shared])
pm.Bernoulli('y_like', logit_p=y_hat, observed=y)
return model