【问题标题】:Pybats forecast error when using Poisson family distribution使用泊松族分布时 Pybats 预测错误
【发布时间】:2021-06-21 19:21:04
【问题描述】:

我正在构建一个时间序列 PyBats 模型,使用泊松分布来表示观察的分布。我的模型实例化如下所示

 model = define_dglm(
        Y=data.actual.values,
        X=None,
        family="poisson",
        k=1,
        prior_length=8,
        dates=data["month"],
        ntrend=2,
        seasPeriods=[],
        seasHarmComponents=[],
        nsamps=10000,
    )

data.actual.values 是一个 numpy 整数数组。实例化模型后,为了用我运行的 pybat 预测未来

forecast_samples = model.forecast_path(k=steps_to_forecast, X=X_future, nsamps=10000)

并得到以下错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/conda/lib/python3.8/site-packages/pybats/dglm.py", line 289, in forecast_path
    return forecast_path_copula(self, k, X, nsamps, **kwargs)
  File "/opt/conda/lib/python3.8/site-packages/pybats/forecast.py", line 211, in forecast_path_copula
    return forecast_path_copula_sim(mod, k, lambda_mu, lambda_cov, nsamps, t_dist, nu)
  File "/opt/conda/lib/python3.8/site-packages/pybats/forecast.py", line 326, in forecast_path_copula_sim
    return np.array(list(map(lambda prior: mod.simulate_from_sampling_model(prior, nsamps),
  File "/opt/conda/lib/python3.8/site-packages/pybats/forecast.py", line 326, in <lambda>
    return np.array(list(map(lambda prior: mod.simulate_from_sampling_model(prior, nsamps),
  File "/opt/conda/lib/python3.8/site-packages/pybats/dglm.py", line 477, in simulate_from_sampling_model
    return np.random.poisson(rate, [nsamps])
  File "mtrand.pyx", line 3573, in numpy.random.mtrand.RandomState.poisson
  File "_common.pyx", line 824, in numpy.random._common.disc
  File "_common.pyx", line 621, in numpy.random._common.discrete_broadcast_d
  File "_common.pyx", line 355, in numpy.random._common.check_array_constraint
ValueError: lam value too large

我尝试将我的 Y 数组转换为浮点数,并尝试将所有 0 值替换为 1 并得到相同的错误。是什么导致了这个错误?

【问题讨论】:

    标签: python time-series poisson


    【解决方案1】:

    问题在于超出了numpy.random.poisson 中允许的最大值。看起来任何大于np.random.poisson(1E19) 的值都会导致此错误。

    您可以尝试几件事:

    • 在定义模型时使用比 8 更长的先验长度。这将有助于产生更稳定的系数估计。定义模型后,检查系数均值向量 (model.a) 和协方差矩阵 (model.R) 是什么,以确保它们是合理的。如果不是,您可以手动更改。
    • 如果您的某些“Y”值真的那么大,泊松模型可能不合适。我建议使用 Pybats 中的普通 dlm 模型对 log(Y) 进行建模。

    希望对你有所帮助!

    谢谢, 艾萨克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2022-01-10
      • 2018-02-10
      • 1970-01-01
      相关资源
      最近更新 更多