When attempting to create target y_hats for my pareto distribution, I came across this error:
TypeError Traceback (most recent call last)
in
32 base_a = m_prior / x1
33 number_a = 1 - y1
—> 34 alpha = math.log(number_a, base_a)
35
TypeError: must be real number, not TensorVariable
I soon realized that math and numpy are unable to take TensorVariables. However, when looking into pm.math.log. I realized that I am unable to create custom base logs as well.
So my question is, how does one create custom base logs to work in pymc3?
Code:
import pymc3 as pm
import math
np.random.seed(123)
Observed X
X = np.array([x_1, x_2, x_3])
Y = np.array([0.25, 0.5, 0.75])
model to identify ideal Pareto Priors
with pm.Model() as pareto_priors_model:
# Lower & Upper bound of unobserved variables
# m_prior = scale parameter or smallest value
# alpha = shape parameter = n/SUM(ln(x_i / m))
min_alpha = 0.1
max_alpha = 10
alpha_prior = pm.Uniform('alpha', min_alpha, max_alpha)
m_prior = pm.Uniform('m', 0.1, cost_20_perc)
x1 = X[0]
y1 = Y[0]
# y_hat = 1 - (m / X_i)^a
# y1 = 1 - ((m_prior / x1) ** alpha_prior)
# ((m_prior / x1) ** alpha_prior) = 1 - y1
number_m = 1 - y1
m = (number_m ** (1/ alpha_prior)) * x1
# y1 = 1 - ((m_prior / x1) ** alpha_prior)
# ((m_prior / x1) ** alpha_prior) = 1 - y1
base_a = m_prior / x1
number_a = 1 - y1
alpha = math.log(number_a, base_a)
q = pm.Pareto(name='q', alpha=alpha, m=m,
observed=X)
Thank you for your time and help