I have the following model
with pm.Model() as model:
lam = pm.Normal(name="lam", mu=1, sigma=1)
alpha = pm.Beta(name="alpha", alpha=1.5, beta=1.5)
beta = pm.Beta(name="beta", alpha=1.5, beta=1.5)
# Adjust sho depending on sign with either alpha or lambda and beta
sho_w = tt.switch(tt.ge(sho, 0), sho ** alpha, (-1 * lam) * ((-1 * sho) ** beta))
# Standardize
sho_w_s = (sho_w - sho_w.mean()) / sho_w.std()
# State specific
B = pm.Normal(name="B", mu=0, sigma=0.5, shape=(n_states, n_sho_vars)) # Sho
B_s = B[state, np.arange(0, n_sho_vars)]
# Model error
eps = pm.InverseGamma(name="eps", alpha=9.0, beta=4.0)
# Model mean
y_hat = pm.Deterministic(name="y_hat", var=pm.math.sum(sho_w_s * B_s, axis=1) )
# Model likelihood
y_like = pm.Normal(name="y_like", mu=y_hat, sd=eps, observed=y)
I am particularly interested in the values of lam, alpha and beta.
I use tt.switch
to elementwise multiply the 2500x4 variable sho
depending on whether its value is positive or negative with lam
and raise it to the power of either alpha
or beta
.
However, the results for the “else” part in tt.switch
(i.e. for the case that sho is negative) yield very strange results for lam
and beta
(lam is roughly zero and the posterior for beta is roughly equal to its prior), so it seems for me that the algorithm fully ignores the “else” part.
The negative and positive values in the sho
array are roughly equally distributed.
Moreover, I am not sure whether the standardization statement standardizes the array column-wise.
I use PyMC 3.11.4
Thanks in advance