【问题标题】:SARIMAX model in PyMC3PyMC3 中的 SARIMAX 模型
【发布时间】:2021-06-23 16:27:50
【问题描述】:

我想在 PyMC3 中写下以下 SARIMAX 模型 (2,0,0) (2,0,0,12) 以对其系数进行贝叶斯估计,但我不知道如何从季节性部分开始 有没有人尝试过这样的事情?

with pm.Model() as ar2:
    theta = pm.Normal("theta", 0.0, 1.0, shape=2)
    sigma = pm.HalfNormal("sigma", 3)
    likelihood = pm.AR("y", theta, sigma=sigma, observed=data)

    trace = pm.sample(
        1000,
        tune=2000,
        random_seed=13,
    )
    idata = az.from_pymc3(trace)

【问题讨论】:

    标签: statsmodels pymc3


    【解决方案1】:

    虽然如果您能得到一个专门使用 PyMC3 的答案,那将是最好的(例如最佳性能),但万一还不存在,还有另一种方法可以做到这一点,即使用 Statsmodels 中的SARIMAX 模型与 PyMC3 结合。

    这里有太多细节无法重复完整的答案,但基本上你包装了与 Statsmodels SARIMAX 模型相关的对数似然和梯度方法。下面是一个示例 Jupyter notebook 的链接,展示了如何执行此操作:

    https://www.statsmodels.org/stable/examples/notebooks/generated/statespace_sarimax_pymc3.html

    【讨论】:

    • 感谢@cfulton 的链接,但我已经尝试过了,在最后一步计算跟踪时出现错误。它似乎与 theano 中的内部错误有关,但我不知道如何修复它。
    【解决方案2】:

    我不确定你是否仍然需要它,但是,扩展 cfulton 的答案,这里是如何修复 statsmodels 示例中的错误(https://www.statsmodels.org/dev/examples/notebooks/generated/statespace_sarimax_pymc3.html,单元格 8):

    with pm.Model():
        # Priors
        arL1 = pm.Uniform('ar.L1', -0.99, 0.99)
        maL1 = pm.Uniform('ma.L1', -0.99, 0.99)
        sigma2 = pm.InverseGamma('sigma2', 2, 4)
    
        # convert variables to tensor vectors
        # # this is wrong:
        theta = tt.as_tensor_variable([arL1, maL1, sigma2])
        # # this is correct:
        theta = tt.as_tensor_variable([arL1, maL1, sigma2], 'v')
    
        # use a DensityDist (use a lamdba function to "call" the Op)
        # # this is wrong:
        # pm.DensityDist('likelihood', lambda v: loglike(v), observed={'v': theta})
        # # this is correct:
        pm.DensityDist('likelihood', lambda v: loglike(v), observed=theta)
    
    
        # Draw samples
        trace = pm.sample(ndraws, tune=nburn, discard_tuned_samples=True, cores=4)
    

    我不是 pymc3/theano 专家,但我认为该错误意味着 Theano 未能将张量的名称与值相关联。如果您在开头一起定义名称和值,它就可以工作。

    我知道这不是您问题的直接答案。不过,我希望它有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2021-03-06
      • 2020-11-11
      • 2021-01-10
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多