使用泊松族分布时的Pybats预测误差

2024-09-30 12:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个timeseries 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数组。在实例化模型之后,为了使用pybats预测未来,我运行了

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数组转换为浮点数,并尝试用1替换所有0值,但得到相同的错误。是什么导致了这个错误


Tags: pathinnumpymodelliblinesitecommon
1条回答
网友
1楼 · 发布于 2024-09-30 12:13:15

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

您可以尝试以下几点:

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

希望这对我有帮助

谢谢, 艾萨克

相关问题 更多 >

    热门问题