@@ -310,16 +310,20 @@ def _hidden_states_from_data(self, data):
310310
311311 for i , (name , s ) in enumerate (zip (names , state_slices )):
312312 obs_idx = info [name ]["obs_state_idx" ]
313+
313314 if obs_idx is None :
314315 continue
315316
316317 X = data [..., s ]
318+
317319 if info [name ]["combine_hidden_states" ]:
318- sum_idx = np .flatnonzero (obs_idx )
319- result .append (X [..., sum_idx ].sum (axis = - 1 )[..., None ])
320+ sum_idx_joined = np .flatnonzero (obs_idx )
321+ sum_idx_split = np .split (sum_idx_joined , info [name ]["k_endog" ])
322+ for sum_idx in sum_idx_split :
323+ result .append (X [..., sum_idx ].sum (axis = - 1 )[..., None ])
320324 else :
321- comp_names = self .state_names [s ]
322- for j , state_name in enumerate ( comp_names ):
325+ n_components = len ( self .state_names [s ])
326+ for j in range ( n_components ):
323327 result .append (X [..., j , None ])
324328
325329 return np .concatenate (result , axis = - 1 )
@@ -332,7 +336,15 @@ def _get_subcomponent_names(self):
332336
333337 for i , (name , s ) in enumerate (zip (names , state_slices )):
334338 if info [name ]["combine_hidden_states" ]:
335- result .append (name )
339+ if self .k_endog == 1 :
340+ result .append (name )
341+ else :
342+ # If there are multiple observed states, we will combine per hidden state, preserving the
343+ # observed state names. Note this happens even if this *component* has only 1 state for consistency,
344+ # as long as the statespace model has multiple observed states.
345+ result .extend (
346+ [f"{ name } [{ obs_name } ]" for obs_name in info [name ]["observed_state_names" ]]
347+ )
336348 else :
337349 comp_names = self .state_names [s ]
338350 result .extend ([f"{ name } [{ comp_name } ]" for comp_name in comp_names ])
@@ -540,7 +552,7 @@ def __init__(
540552 self ._component_info = {
541553 self .name : {
542554 "k_states" : self .k_states ,
543- "k_enodg " : self .k_endog ,
555+ "k_endog " : self .k_endog ,
544556 "k_posdef" : self .k_posdef ,
545557 "observed_state_names" : self .observed_state_names ,
546558 "combine_hidden_states" : combine_hidden_states ,
0 commit comments