【问题标题】:Dynamic Factor Model Estimation动态因子模型估计
【发布时间】:2021-10-22 17:28:51
【问题描述】:

我正在寻找一个基于 python 或 matlab 的包,它可以估计以下模型的参数:

在原始论文中,他们引用了 Koop 的 this 代码。我遇到的问题是这个程序以及 Python 的 statsmodel 中的标准包估计了以下形式的 DFM:

与论文中模型的不同之处在于,如果我们有两个因素,那么A_1是二维的,但是在我要估计的模型中,我们只想估计a_11并假设a_12 = 0。哪个包可以估计这样的模型?

【问题讨论】:

    标签: python matlab statistics modeling


    【解决方案1】:

    在 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()
    

    有关factorsfactor_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 类更健壮,并且可能是更好的选择。

    【讨论】:

    • 效果很好。唯一的问题是,虽然我可以估计模型,但参数似乎与我试图复制的参数相去甚远。原因是另一种算法使用贝叶斯方法和吉布斯采样算法。我可能需要能够修改 Matlab 代码来实现这一点
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多