Forecasting using Gaussian Random Walk

I imagined it would work something like this:

with pm.Model() as model:
        
    sigma_level = pm.HalfNormal('sigma_level', sigma=1.0)
    sigma_trend = pm.Gamma('sigma_trend', alpha=1, beta=100)
    sigma_obs = pm.HalfNormal('sigma_obs', 1.0)

    trend = pm.Normal('trend', mu=0, sigma=sigma_trend, shape=n_obs).cumsum()

    # No need for a time shape here. It will inherit the shape of the mean
    mu = pm.Normal('mu', mu=trend, sigma=sigma_level).cumsum()

    obs = pm.Normal('obs', mu=mu, sigma=sigma_obs, observed=nile.height)

    llevel_trace = pm.sample(target_accept=0.95, init='jitter+adapt_diag_grad')

I tested it and it doesn’t work very well. I’d just stick to exactly what you did, adding a non-zero mean to the GRW to induce a drift.

1 Like