I’d like to declare multiple Gaussian random walks which evolve independently. Following an earlier post asking about multiple drifts (Can I instantiate multiple random walks with different drifts), I tried:
mean_sigma = pm.HalfNormal('mean_rw_sigma', 1., shape=n_tourneys)
prior_means = pm.GaussianRandomWalk('prior_means', sigma=mean_sigma, shape=(n_years-1, n_tourneys))
However, this doesn’t compile:
ValueError: Input dimension mis-match. (input.shape = 3, input.shape = 4)
I thought I could maybe do the MvGaussianRandomWalk with a diagonal covariance, but I’ve been unable to create a diagonal covariance matrix, so I’d be grateful for any pointers. Apologies if I’m doing something silly, I’m pretty new to pymc3!
Could you raise an issue on Github? This use to work i think, but now
https://github.com/pymc-devs/pymc3/blob/2824027837931a6c2f1d4ac5f210eb36b8fdf7a7/pymc3/distributions/timeseries.py#L219-L225 makes it impossible.
import pymc3 as pm
import numpy as np
import theano.tensor as tt
n_timeseries, n_timepoint = 10, 100
mean_sigma = pm.HalfNormal('mean_rw_sigma', 1., shape=n_timeseries)
prior_means = pm.MvGaussianRandomWalk('rw', mu=np.zeros(n_timeseries), chol=tt.diag(mean_sigma), shape=(n_timepoint, n_timeseries))
Thanks for your quick help Junpeng! I’ve now raised an issue: Multiple independent random walks with differing innovation sds · Issue #4409 · pymc-devs/pymc3 · GitHub . That diagonal normal version should be a good workaround. I didn’t realise we can just use theano to manipulate tensors like that, that’s really great.