MCMC 建模 - 这甚至可以解决吗?

机器算法验证 贝叶斯 马尔可夫链蒙特卡罗 pymc
2022-04-05 17:11:39

我对贝叶斯建模和 MCMC 非常陌生 - 我想知道我在下面描述的问题是否可以解决。似乎缺少太多信息,但我想了解您的想法。考虑以下:

我有一个道路交叉口,有一个入口和两个出口,A 和 B。我的目标是估计在给定的一天通过这个交叉口的汽车数量,这等于通过入口的汽车数量。我张贴了两个人,一个在 A 出口,另一个在 B 出口,计算从他们的出口出来的汽车数量。它们都不是很好,因此它们仅捕获C实际通过各自出口的汽车的百分比。我不知道是什么C更糟糕的是,B出口的人丢失了他的记录,所以我只有A的数字。我认为这种情况应该用下图来描述:

在此处输入图像描述

根据历史数据,我知道平均 p% 的人通过 A,而 (1-p)% 的人通过 B,但是在这一天,我没有任何信息。在这个例子中,我只有两个出口,但通常我可能有更多(例如 3-5 个)。

是否有可能用我拥有的数据来估计“#cars thru entry”的分布?如果是这样,您将为每个随机变量分配什么分布?

1个回答

我将在创建它时记录我的建模想法:

import pymc as pm

我怎样才能重新创建这些数据?嗯,N_T汽车进来了。我知道N_T吗?不,所以它是一个随机变量。为简单起见,我会说它是最大 1000 的离散制服(您可以将其更改为,比如说,泊松)

N_T = pm.DiscreteUniform('N_T', 0, 1000)

在这些N_T进入的汽车中,我知道一辆车很有可能会进入pA。因此,通过 A 的汽车数量是二项式 rv。但我p确定吗?可能不是,你提到这是一个历史平均值,所以我们应该随机建模(使用 beta-binomial 模型):

p_A = pm.Beta('p_A', 50, 50) #centered at 0.5, but with some variance. This depends on your historical data.
N_A = pm.Binomial('N_A', N_T, p_A)

接下来,CA 的观察者只记录了百分之几的汽车。让我们假设这C是完全准确的,即没有不确定性C

C=0.95

然后记录的汽车数量再次成为二项式,带有N_A试验。此外,假设观察者 A 记录了 20 辆汽车。

obs_A = pm.Binomial('obs', N_A, C, observed=True, value = 20)  

让我们启动 mcmc 佳能:

mcmc = pm.MCMC( [obs_A, N_A, p_A, N_T] )
mcmc.sample(10000, 5000)

from pymc.Matplot import plot as mcplot
mcplot(mcmc)

我得到这个后验N_T

在此处输入图像描述