# Advice on Reparameterization

**URL:** https://discourse.pymc.io/t/advice-on-reparameterization/2357
**Category:** Questions
**Created:** [December 10, 2018, 1:20am UTC](https://discourse.pymc.io/t/advice-on-reparameterization/2357 "2018-12-10T01:20:37Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![desepg](https://avatars.discourse-cdn.com/v4/letter/d/eb8c5e/32.png) [@desepg](https://discourse.pymc.io/u/desepg)
#### Post date: [December 10, 2018, 1:20am UTC](https://discourse.pymc.io/t/advice-on-reparameterization/2357/1 "2018-12-10T01:20:37Z")

</div>

The current model I am using is:

> `with pm.Model() as model:`  
> `alpha = pm.Normal('alpha', mu = 1, sd = 10)`  
> `BoundedDelta = pm.Bound(pm.Normal, lower = -1, upper = 1)`  
> `delta = BoundedDelta('delta', mu = 0, sd = 3)`  
> `var_beta = pm.InverseGamma('var_beta',alpha=.001, beta=.001)`  
> `var_return = pm.InverseGamma('var_return', alpha=.001, beta=.001)`  
> `intercept = pm.Normal('intercept', mu = 0, sd = 1)`
> 
> `betas = StochasticBeta('betas', mu=0, alpha=alpha, delta=delta, var=var_beta, shape=len(returns_data_copy['excess_sym']))`
> 
> `r_mu = T.prod(betas, returns_data_copy['excess_market'].values) + T.sum(intercept)`
> 
> `observed = pm.Normal('observed', mu=r_mu, tau=1/var_return, observed=returns_data_copy['excess_sym'].values)`
> 
> `trace = pm.sample(2000, tune=1000, cores=4, progressbar=True)`
> 
> `pm.summary(trace)`

with `StochasticBeta( )` as:

> `class StochasticBeta(pm.distributions.distribution.Continuous):`  
> `def __init__ (self, var, mu, alpha, delta, init=pm.Flat.dist(), *args, **kwargs):`  
> `super(StochasticBeta, self). __init__ (*args, **kwargs)`  
> `self.var = var = T.as_tensor_variable(var)`  
> `self.mu = mu = T.as_tensor_variable(mu)`  
> `self.alpha = alpha = T.as_tensor_variable(alpha)`  
> `self.delta = delta = T.as_tensor_variable(delta)`  
> `self.init = init`  
> `self.mode = T.as_tensor_variable(0.)`
> 
> `def logp(self, x):`  
> `var = self.var`  
> `mu = self.mu`  
> `alpha = self.alpha`  
> `delta = self.delta`  
> `init = self.init`  
> `var = self.var`  
> `x_im1 = x[:-1]`  
> `x_i = x[1:]`  
> `innov_like = pm.Normal.dist(mu=alpha + delta * (x_im1 - alpha) + mu, tau=1/var).logp(x_i)`  
> `return init.logp(x[0]) + T.sum(innov_like)`

Are there any recommendations on optimizing performance? How would I consider a reparameterization or scaling? It’s averaging roughly 10mins to complete but there are frequent divergences in the chains or failure to converge at all.

---

<div class="post-metadata">

### Author: ![junpenglao](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/junpenglao/32/8_2.png) [@junpenglao](https://discourse.pymc.io/u/junpenglao)
#### Post date: [December 10, 2018, 6:10am UTC](https://discourse.pymc.io/t/advice-on-reparameterization/2357/2 "2018-12-10T06:10:59Z")

</div>

I will try to play with the scale of the priors. For example, `pm.InverseGamma('var_beta',alpha=.001, beta=.001)` as priors for variance seems too informative.

---

<div class="post-metadata">

### Author: ![desepg](https://avatars.discourse-cdn.com/v4/letter/d/eb8c5e/32.png) [@desepg](https://discourse.pymc.io/u/desepg)
#### Post date: [December 10, 2018, 7:09pm UTC](https://discourse.pymc.io/t/advice-on-reparameterization/2357/3 "2018-12-10T19:09:31Z")

</div>

By “too informative”, do you mean the sampler has difficulties because the hyper-parameters are very precise? I found the scaling portion in the FAQ and will review for advice on best practices.
