Dear pymc3 community.
Hello, I’m currently working discrete choice modelling with pymc3.
I built several basic models to build up my model.
So, the point is that I need to draw the number of MvNormal coefficients in pooled hierarchical model
I already build hierarchical bayesian logit model with following methods.
with pm.Model() as modellogit: # beta coefficient variance packed_L = pm.LKJCholeskyCov('packed_L', n= beta_size, eta = 2, sd_dist = pm.HalfCauchy.dist(1.5)) Lower = pm.expand_packed_triangular(beta_size,packed_L) Sigma = pm.Deterministic('Sigma',pm.math.dot(Lower,Lower.T)) # Beta coefficient betabar = pm.MvNormal('betabar',mu = np.zeros(beta_size), cov =np.identity(beta_size), shape=(1,beta_size)) beta = pm.MvNormal('beta',mu = betabar, cov = Sigma, shape = (nid,beta_size)) temp1 = tt.sum(attr*beta[df1['id'].values,],axis=1) temp2 = tt.reshape(temp1,(nid*ntrial,nalt))
However, the thing I confronted is that each individual shold get different covariance value.
So I replace
Sigma to (nid,beta_size,beta_size) tensor3 objects and
betabar to (nid,beta_size) matrix objects
to assign different sigmas per individual.
and tried it. but it does not work due to cov needs to 2 dim matrix
And then. I tried for loop in below way.
beta =  for i in range(nid): Sigma = (... new Sigma...) _beta = pm.MvNormal('beta %d' %i ,mu = betabar, cov = Sigma, shape = (1,beta_size)) beta.append(_beta) beta = tt.stack(beta) print(beta) temp1 = tt.sum(attr*beta[df1['id'].values,:],axis=1) temp2 = tt.reshape(temp1,(nid*ntrial,nalt))
But it also did not work since temp1 part produces (nid * ntrial * nalt * beta_size) array.
(attr matrix is size of (nid * ntrial * nalt, beta_size ) array)
How could I solve this problem?
I’m very appreciate your contribution to bayesian world!