This is a little bit cleaner. You can subsequently use a for loop to build up mu:
import theano
import theano.tensor as tt
with pm.Model() as tight2:
beta_mu_hp = pm.Normal('beta_mu_hp', 0., 1., shape=7)
beta_sd_hp = pm.HalfCauchy('beta_sd_hp', 1., shape=7)
alpha = pm.Normal('alpha', mu=beta_mu_hp[0], sd=beta_sd_hp[0], shape=n_site)
beta_mat = [pm.Normal('_beta_{}'.format(i), mu=beta_mu_hp[i+1], sd=beta_sd_hp[i+1], shape=n_site)
for i in range(6)]
beta = pm.Deterministic('beta', tt.stack(beta_mat, axis=1))
sigma = pm.HalfCauchy('sigma', 1)
tr_tight = pm.sample_prior_predictive(100)
I feel like this should work:
with pm.Model() as tight:
beta_mu_hp = pm.Normal('beta_mu_hp', 0., 1., shape=7)
beta_sd_hp = pm.HalfCauchy('beta_sd_hp', 1., shape=7)
alpha = pm.Normal('alpha', mu=beta_mu_hp[0], sd=beta_sd_hp[0], shape=n_site)
beta = pm.Normal('beta', mu=beta_mu_hp[1:].reshape((6,1)), sd=beta_sd_hp[1:].reshape((6,1)), shape=(6,n_site))
sigma = pm.HalfCauchy('sigma', 1)
tr_tight = pm.sample_prior_predictive(100)
but it generates an error during prior predictive sampling:
~/anaconda3/lib/python3.7/site-packages/pymc3-3.6-py3.7.egg/pymc3/distributions/distribution.py in <listcomp>(.0)
670 elif broadcast_shape[:len(size_tup)] == size_tup:
671 suffix = broadcast_shape[len(size_tup):] + dist_shape
--> 672 samples = [generator(*args, **kwargs).reshape(size_tup + (1,)) for _ in range(np.prod(suffix, dtype=int))]
673 samples = np.hstack(samples).reshape(size_tup + suffix)
674 else:
ValueError: cannot reshape array of size 600 into shape (100,1)