Hi. I am trying to build a hierarchical stochastic volatility model, similar to a flat one, described in the docs, but for a 2-D stock returns dataset, shaped n_dates x n_assets.
I tried following the tutorials and using the plate context, like so (or variations thereof):
def hierarchical_SV_model(data):
# hyper priors
sigma_mu = numpyro.sample('sigma_mu', dist.Exponential(10.))
sigma_sd = numpyro.sample('sigma_sd', dist.Normal(0, .05))
nu_mu = numpyro.sample('nu_mu', dist.Exponential(.1))
nu_sd = numpyro.sample('nu_sd', dist.Normal(0, 5))
# priors
n_dates, n_assets = data.shape
with numpyro.plate('assets', n_assets, dim=-1):
sigma = numpyro.sample('sigma', dist.Normal(sigma_mu, sigma_sd))
h = numpyro.sample(
'h', dist.GaussianRandomWalk(scale=sigma, num_steps=n_dates))
nu = numpyro.sample('nu', dist.Normal(nu_mu, nu_sd))
# likelihood
return numpyro.sample(
'y', dist.StudentT(df=nu, loc=0.0, scale=jnp.exp(-2 * h)), obs=data,
)
But I get broadcasting or "Model and guide shapes disagree at site: " errors. I also tried setting the shapes manually with sample_shape=
, but that also results in errors.
Any clarification and help would be greatly appreciated. Thank you!