在 Statsmodels 中有两种方法可以做到这一点,尽管每种方法都有权衡:
(1) 如果你可以接受误差项的 1 滞后(即如果可以有 e(i,t) = \phi(i,1) e(i,t-1) + u( i,t),来自您链接的“模型”方程),那么您可以使用 DynamicFactorMQ 类。对于两个独立演化的因素,您可以使用以下方法:
mod = sm.tsa.DynamicFactorMQ(y, factors=['f1', 'f2'],
factor_orders={'f1':1, 'f2':1},
idiosyncratic_ar1=True)
res = mod.fit()
有关factors 和factor_orders 参数如何工作的更多详细信息,请参阅here。基本上,通过指定 factor_orders={'f1':1, 'f2':1} 而不是 factor_orders={('f1', 'f2'):1}(如果您不指定任何内容,这是默认设置),因子会单独演变(这与对角 A 矩阵相同)。
(2) 否则,如果您没有太多左侧变量,您可以使用带有固定参数的DynamicFactor 类:
mod = sm.tsa.DynamicFactor(std, factor_order=1, k_factors=2,
error_order=1,
enforce_stationarity=False)
with mod.fix_params({'L1.f2.f1': 0, 'L1.f1.f2': 0}):
res = mod.fit()
在这种情况下,当您执行mod.fix_params({'L1.f2.f1': 0, 'L1.f1.f2': 0}) 时,您指定a_12 = a_21 = 0。有关使用fix_params 的更多详细信息,请参阅here。
但总的来说,上述选项 (1) 中的 DynamicFactorMQ 类更健壮,并且可能是更好的选择。