Also, if I changed S2_P_Bayesian_Interface part into the following:
def S2_P_Bayesian_Interface(mu, sigma, data, trace):
########################################################################################################################
with pm.Model() as model_P:
# Obtain the posterior values from initial model:
# nu_P = from_posterior('nu_0', trace['nu_0'])
sigma_P = from_posterior('sigma_0', trace['sigma_0'])
mu_P = from_posterior('mu_0', trace['mu_0'])
print(sigma_P)
# Prior Distributions for unknown model parameters from posterior distribution:
# nu_P = pm.HalfNormal('nu_P', sigma=sigma)
# sigma_P = pm.HalfNormal('sigma_P', sigma=np.mean(sigma_P))
# mu_P = pm.Normal('mu_P', mu=np.mean(mu_P), sigma=np.mean(sigma_P))
# Observed data is from a Likelihood distributions (Likelihood (sampling distribution) of observations):
observed_data_P = Hypsecant('observed_data_P', mu=mu_P, sigma=sigma_P, observed=data)
# obtain starting values via MAP
# startvals_P = pm.find_MAP(model=model_P)
# instantiate sampler
# step_P = pm.Metropolis() ## Best one
# step_P = pm.HamiltonianMC()
# step_P = pm.NUTS()
# step_P = pm.sample_smc(n_steps=10, cores=2,progressbar=True)
# Printing the result of log_likelihood:
# print('log_likelihood result:', model_P)
# draw 5000 posterior samples
trace_P = pm.sample(draws=1000, tune=1000, chains=3, cores=1, progressbar=True)
# trace_P = pm.sample(start=startvals_P, draws=1500, step=step_P, tune=500, chains=3, cores=1, progressbar=True)
# Obtaining Posterior Predictive Sampling:
post_pred_P = pm.sample_posterior_predictive(trace_P, samples=1000)
# post_pred_P = pm.sample_posterior_predictive(trace_P, samples=1500)
print(post_pred_P['observed_data_P'].shape)
print('\nSummary: ')
print(pm.stats.summary(data=trace_P))
print(pm.stats.summary(data=post_pred_P))
########################################################################################################################
return trace_P, post_pred_P
I get the following errors:
File "-----\lib\site-packages\pymc3\distributions\distribution.py", line 971, in _draw_value
return dist_tmp.random(point=point, size=size)
in random:
return generate_samples(stats.hypsecant.rvs, loc=mu, scale=sigma, dist_shape=self.shape, size=size)
File "------\lib\site-packages\pymc3\distributions\distribution.py", line 1116, in generate_samples
samples = generator(size=dist_bcast_shape, *args, **kwargs)
File "------\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 1035, in rvs
raise ValueError("Domain error in arguments.")
ValueError: Domain error in arguments.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
line 90, in <module>
trace_S2_P = S2_P_Bayesian_Interface(mu=trace_S2_0['mu_0'], sigma=trace_S2_0['sigma_0'], data=input_data_list[m], trace=trace_S2_0)
, line 36, in S2_P_Bayesian_Interface
post_pred_P = pm.sample_posterior_predictive(trace_P, samples=1000)
File "------\lib\site-packages\pymc3\sampling.py", line 1733, in sample_posterior_predictive
values = draw_values(vars_, point=param, size=size)
File "------\lib\site-packages\pymc3\distributions\distribution.py", line 791, in draw_values
value = _draw_value(next_, point=point, givens=temp_givens, size=size)
File "------\lib\site-packages\pymc3\distributions\distribution.py", line 979, in _draw_value
val = np.atleast_1d(dist_tmp.random(point=point, size=None))
line 178, in random
return generate_samples(stats.hypsecant.rvs, loc=mu, scale=sigma, dist_shape=self.shape, size=size)
File "------\lib\site-packages\pymc3\distributions\distribution.py", line 1116, in generate_samples
samples = generator(size=dist_bcast_shape, *args, **kwargs)
File "------\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 1035, in rvs
raise ValueError("Domain error in arguments.")
ValueError: Domain error in arguments.
I know the error is caused by the random definition but what could be my mistake here?
Side question:
With regards to the naming in the priors, is there a way when you get to S2_P_Bayesian_Interface you can rename the variable name of the priors from e.g. sigma_0 to sigma_P after the from_posterior?