I have som trouble with my model in pymc3. My main code looks like this:
with pm.Model() as RAA_Eloss:
#Priors
a = Normal('a', mu=10, sigma=30)
b = Normal('b', mu=10, sigma=30)
c = Normal('c', mu=1, sigma=10)
mu = RAA_model(a, b, c, RAA_x, RAA_y, RAA_xerr, RAA_yerr, pp_pt, PPspectra)
likelihood = Normal('likelihood', mu=mu, tau=1/(RAA_yerr)**2, observed=RAA_y)
trace = pm.sample(draws=5000, tune=1000, chains=4, return_inferencedata=True)
az.plot_trace(trace);
And the function RAA_model:
def RAA_model(a, b, c, RAA_x, RAA_y, RAA_xerr, RAA_yerr, pt, pp_spectra):
intg_res = np.zeros_like(RAA_x)
pp_fit = interp1d(pt, pp_spectra, fill_value="extrapolate")
for i, x in enumerate(gala30x):
# integral DeltaPt from 0 to infinity
scale_fct = RAA_x / gala30x[-1]
x = x * scale_fct
shifted_pt = RAA_x + x
mean_dpt = mean_ptloss(shifted_pt, b, c)
alpha = a
beta = a / mean_dpt
pdpt = Eloss_func(x, alpha, beta)
intg_res += scale_fct*gala30w[i]*pdpt*pp_fit(shifted_pt)
return intg_res/pp_fit(RAA_x)
The problem is in the function Eloss_func(x, alpha, beta):
def Eloss_func(x, alpha, beta):
return beta**(alpha)*np.exp(-beta*x)*x**(alpha-1)/math.gamma(alpha)
It seem to be with math.gamma(alpha), I get the following error: must be real number, not FreeRV
How can in fix this?