我正在寻找一个基于Python或Matlab的软件包,它可以估计以下模型的参数:
的数据在最初的论文中,他们引用了Koop的this代码。我遇到的问题是,这个程序以及来自Python的statsmodel的标准包估计了以下形式的DFM:
的与本文中的模型不同的是,如果我们有两个因素,那么A_1是二维的,但在我想要估计的模型中,我们只想估计a_11并假设a_12 = 0。有没有一个软件包可以估计这样的模型?
hgc7kmma1#
在Statmodels中有两种方法可以做到这一点,尽管每种方法都有权衡:(1)如果你对误差项有1个滞后(即如果可以让e(i,t)= \phi(i,1)e(i,t-1)+ u(i,t),从你链接的“模型”方程中),那么你可以使用DynamicFactorMQ类。对于两个独立演变的因子,可以使用以下公式:
DynamicFactorMQ
mod = sm.tsa.DynamicFactorMQ(y, factors=['f1', 'f2'], factor_orders={'f1':1, 'f2':1}, idiosyncratic_ar1=True) res = mod.fit()
字符串有关factors和factor_orders参数如何工作的更多详细信息,请参阅此处。基本上,通过指定factor_orders={'f1':1, 'f2':1}而不是factor_orders={('f1', 'f2'):1}(如果不指定任何内容,则为默认值),因子将单独演化(与对角A矩阵相同)。(2)否则,如果你没有太多的左侧变量,你可以使用带有固定参数的DynamicFactor类:
factors
factor_orders
factor_orders={'f1':1, 'f2':1}
factor_orders={('f1', 'f2'):1}
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类更健壮,可能是更好的选择。
mod.fix_params({'L1.f2.f1': 0, 'L1.f1.f2': 0})
fix_params
1条答案
按热度按时间hgc7kmma1#
在Statmodels中有两种方法可以做到这一点,尽管每种方法都有权衡:
(1)如果你对误差项有1个滞后(即如果可以让e(i,t)= \phi(i,1)e(i,t-1)+ u(i,t),从你链接的“模型”方程中),那么你可以使用
DynamicFactorMQ
类。对于两个独立演变的因子,可以使用以下公式:字符串
有关
factors
和factor_orders
参数如何工作的更多详细信息,请参阅此处。基本上,通过指定factor_orders={'f1':1, 'f2':1}
而不是factor_orders={('f1', 'f2'):1}
(如果不指定任何内容,则为默认值),因子将单独演化(与对角A矩阵相同)。(2)否则,如果你没有太多的左侧变量,你可以使用带有固定参数的
DynamicFactor
类:型
在本例中,当您执行
mod.fix_params({'L1.f2.f1': 0, 'L1.f1.f2': 0})
时,您指定a_12 = a_21 = 0。有关使用fix_params
的更多详细信息,请参阅here。但总的来说,上面选项(1)中的
DynamicFactorMQ
类更健壮,可能是更好的选择。