I still don’t see why you need a scan, or a loop for that matter. Couldn’t you make a big matrix, like:
mu = pm.Normal('mu_c0', mu = mean_mu, sigma = sd_mu, shape = N_subjects)
b = pm.Uniform("b", lower = 0.1, upper = 1.0)
zeros = pt.zeros((N_subjects, 1))
ones = pt.ones((N_subjects, 1))
# This is just zero?
log_ten= pt.log10(ones)
phi_pymc = pt.concatenate([mu[:, None], zeros, zeros, ones, b.repeat(N_subjects)[:, None], zeros, zeros, log_ten, log_ten, log_ten, ones, zeros, zeros, ones], axis=1)
Now phi_pymc is an (N_subjects, 14) matrix where each row is a subject. You can then do whatever you need to do inside your log-likelihood functions all in one shot by passing in the entire matrix?