如何从一个分布中采样一个值 n 并从另一个分布中获取 n 个值

问题描述

免责声明:我不知道我在做什么,无论是在 pymc3 还是贝叶斯统计中,但我正在尝试通过直接潜入来学习......

我想我想做的是:

  • 我有一个分布 A,代表事件发生的频率
  • 我有一个分布 B,代表每个事件的“成本”
  • 我想使用来自 A 的采样频率 n 和来自 B 的采样 n 成本
  • 我关心的每次抽奖的结果是费用的总和

所以每次抽奖我都会有来自 B 的可变数量的值。

我对代码的天真尝试是:

with pm.Model() as model:
    events = pm.Poisson("events",mu=5)
    count = events.random()
    losses = [
        pm.Lognormal(f"loss[{i}]",1.2,0.2)
        for i in range(count)
    ]
    year_loss = pm.Deterministic("year_loss",pm.math.sum(losses))

    trace = pm.sample(draws=500,chains=1)

    total_loss = trace.get_values("year_loss").sum()
    print(f"total_loss: {total_loss}")
    mean_loss = total_loss / 500
    print(f"mean_loss: {mean_loss}")

这种“工作方式”,因为我可以得到一些输出,如:

Sequential sampling (1 chains in 1 job)
CompoundStep
>Metropolis: [events]
>NUTS: [loss[4],loss[3],loss[2],loss[1],loss[0]]
Sampling 1 chain for 1_000 tune and 500 draw iterations (1_000 + 500 draws total) took 2 seconds.02<00:00 Sampling chain 0,0 divergences]
Only one chain was sampled,this makes it impossible to run some convergence checks
total_loss: 8431.667563769252
mean_loss: 16.8633351275385

但真正发生的是 count 在跟踪中的所有绘图中只有一个值。

相反,我希望它在每次抽奖时都有一个独立的值。

有人能指点我正确的方向吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)