Hi @Dekermanjian !
This is an esoteric implementation detail, but it’s (poorly) documented here. The intercept object is a vector, so its shape is actually just (3,)
. All the objects in ssm
store a batch dimension on the far left to allow for the possibility that they are time varying. For example if you look at the transition matrix ar3.ssm.transition.shape.eval()
you will see the shape is also (1, 3, 3)
.
If you instead ask for the matrices using keys, like ar3.ssm['obs_intercept']
, there is some logic to remove this batch dimension when it isn’t being using. This will give you the shape (2,)
as expected. If you had a model with a time-varying obs intercept (for example an exogenous regression component), then it would not clip this first dimension.