Hello,
Yes, you can do this in a custom state space model. If I understand correctly, you want a model like:
where s_t is known?
Then that would look like:
class CustomLocalLevel(sm.tsa.statespace.MLEModel):
def __init__(self, endog, s_t):
super().__init__(endog, k_states=1)
self.s_t = np.array(s_t).reshape(1, 1, self.nobs)
self['design', 0, 0] = 1.
self['transition', 0, 0] = 1.
self['selection', 0, 0] = 1.
self.ssm.initialize_diffuse()
@property
def param_names(self):
return ['sigma_eps', 'sigma_eta']
@property
def start_params(self):
var = np.var(np.diff(self.endog[:, 0]))
return np.r_[var / 3, 2 * var / 3]
def transform_params(self, params):
return params**2
def untransform_params(self, params):
return params**0.5
def update(self, params, **kwargs):
params = super().update(params, **kwargs)
self['obs_cov'] = params[0] * self.s_t
self['state_cov', 0, 0] = params[1]
Best,
Chad