I am trying to fit the hierarchical bayesian logistic model using pystan:
#construct the data block
bmtl_code = “”"
data {
int<lower=0> N; //num observations
int<lower=1> J; // num predicators
int<lower=1> K; //num tasks
int<lower=1, upper=K> kk[N]; //task label for each observation
matrix[N,J] x; //observation predicators
int y[N]; //observation outcomes
matrix[J,K] Zero;
}
parameters {
vector[K] alpha; //intercept alpha
matrix[J, K] beta; //coefficients beta
corr_matrix[K] Omega; //prior correlation
vector<lower=0>[K] sigma; //prior scale
real<lower=0> tau;
vector<lower=0>[J] psi;
}
transformed parameters {
vector[J] r; //shrinkage scalar
vector[J] r_square;
r = tau*psi;
for (j in 1:J)
r_square[j]=r[j]*r[j];
}
model {
psi ~ cauchy(0,1);
tau ~ cauchy(0,1);
alpha ~ cauchy(0,10);
sigma ~ cauchy(0,2.5);
Omega ~ lkj_corr(1);
for (j in 1:J)
beta[j] ~ multi_normal(Zero[j], r_square[j] * quad_form_diag(Omega, sigma));
for (n in 1:N)
y[n] ~ bernoulli(inv_logit(alpha[kk[n]] + dot_product(x[n],beta[,kk[n]])));
}
“”"
bmtl_data = dict(N=X_train.shape[0], J=num_features, K=num_tasks,
kk=df_train[‘label’].values, x=X_train, y=y_train,
Zero=np.zeros((num_features,num_tasks)))
fit = pystan.stan(model_code=bmtl_code, data=bmtl_data)
I ran the code above and it returned the following message:
RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
“”"
Traceback (most recent call last):
File “/anaconda3/lib/python3.6/multiprocessing/pool.py”, line 119, in worker
result = (True, func(*args, **kwds))
File “/anaconda3/lib/python3.6/multiprocessing/pool.py”, line 44, in mapstar
return list(map(*args))
File “stanfit4anon_model_6f6086b057a6e799617a8be0e0bc8dce_4816030848099204205.pyx”, line 368, in stanfit4anon_model_6f6086b057a6e799617a8be0e0bc8dce_4816030848099204205._call_sampler_star
File “stanfit4anon_model_6f6086b057a6e799617a8be0e0bc8dce_4816030848099204205.pyx”, line 401, in stanfit4anon_model_6f6086b057a6e799617a8be0e0bc8dce_4816030848099204205._call_sampler
RuntimeError: Initialization failed.
“”"
The above exception was the direct cause of the following exception:
RuntimeError Traceback (most recent call last)
in ()
3 Zero=np.zeros((num_features,num_tasks)))
4
----> 5 fit = pystan.stan(model_code=bmtl_code, data=bmtl_data)
/anaconda3/lib/python3.6/site-packages/pystan/api.py in stan(file, model_name, model_code, fit, data, pars, chains, iter, warmup, thin, init, seed, algorithm, control, sample_file, diagnostic_file, verbose, boost_lib, eigen_lib, n_jobs, **kwargs)
400 sample_file=sample_file, diagnostic_file=diagnostic_file,
401 verbose=verbose, algorithm=algorithm, control=control,
–> 402 n_jobs=n_jobs, **kwargs)
403 return fit
/anaconda3/lib/python3.6/site-packages/pystan/model.py in sampling(self, data, pars, chains, iter, warmup, thin, seed, init, sample_file, diagnostic_file, verbose, algorithm, control, n_jobs, **kwargs)
724 call_sampler_args = izip(itertools.repeat(data), args_list, itertools.repeat(pars))
725 call_sampler_star = self.module._call_sampler_star
–> 726 ret_and_samples = _map_parallel(call_sampler_star, call_sampler_args, n_jobs)
727 samples = [smpl for _, smpl in ret_and_samples]
728
/anaconda3/lib/python3.6/site-packages/pystan/model.py in _map_parallel(function, args, n_jobs)
79 try:
80 pool = multiprocessing.Pool(processes=n_jobs)
—> 81 map_result = pool.map(function, args)
82 finally:
83 pool.close()
/anaconda3/lib/python3.6/multiprocessing/pool.py in map(self, func, iterable, chunksize)
264 in a list that is returned.
265 ‘’’
–> 266 return self._map_async(func, iterable, mapstar, chunksize).get()
267
268 def starmap(self, func, iterable, chunksize=None):
/anaconda3/lib/python3.6/multiprocessing/pool.py in get(self, timeout)
642 return self._value
643 else:
–> 644 raise self._value
645
646 def _set(self, i, obj):
RuntimeError: Initialization failed.
I am new to pystan and really not sure how to debug.
Any help would be greatly appreciated!
Jasmine