Python PyMC中的伪实验

Python PyMC中的伪实验,python,bayesian,pymc,Python,Bayesian,Pymc,有可能使用PyMC进行“伪实验”吗 所谓伪实验,我指的是从先前的实验中取样,然后在给定每个伪实验的情况下,从后面的实验中取样,从而生成随机的“观察结果”。然后,将每个参数的轨迹与从后面采样时使用的样本(从前面获得)进行比较 一个更具体的例子:假设我想知道进程X的速率。我计算在一段时间内发生了多少次。然而,我知道过程Y有时也会发生,并且会污染我的计数。过程Y的速率已知,但有一定的不确定性。因此,我建立了一个模型,包括我的观察结果和来自后验数据的样本: import pymc class mymo

有可能使用PyMC进行“伪实验”吗

所谓伪实验,我指的是从先前的实验中取样,然后在给定每个伪实验的情况下,从后面的实验中取样,从而生成随机的“观察结果”。然后,将每个参数的轨迹与从后面采样时使用的样本(从前面获得)进行比较

一个更具体的例子:假设我想知道进程X的速率。我计算在一段时间内发生了多少次。然而,我知道过程Y有时也会发生,并且会污染我的计数。过程Y的速率已知,但有一定的不确定性。因此,我建立了一个模型,包括我的观察结果和来自后验数据的样本:

import pymc

class mymodel:
    rate_x = pymc.Uniform('rate_x', lower=0, upper=100)
    rate_y = pymc.Normal('rate_y', mu=150, tau=1./(15**2))
    total_rate = pymc.LinearCombination('total_rate', [1,1], [rate_x, rate_y])
    data = pymc.Poisson('data', mu=total_rate, value=193, observed=True)

Mod = pymc.Model(mymodel)
MCMC = pymc.MCMC(Mod)
MCMC.sample(100000, burn=5000, thin=5)
print MCMC.stats()['rate_x']['quantiles']
然而,在我做实验之前(或者在我“揭盲”我的分析并查看我的数据之前),我想知道我期望的敏感度——我的速率x测量的不确定度是多少

为了回答这个问题,我可以从先前的

Mod.draw_from_prior()
但这只对
比率x
比率y
进行采样,并计算
总比率
。但一旦这些值由
draw\u from\u previor()
设置,我就可以绘制一个伪实验:

Mod.data.random()
这只是返回一个数字,因此我必须将
Mod.data
的值设置为随机样本。因为
Mod.data
设置了
observed
标志,我还必须“强制”它:

现在我可以再次从后部取样

MCMC.sample(100000, burn=500, thin=5)
print MCMC.stats()['rate_x']['quantiles']
所有这些都有效,所以我想我的问题的简单答案是“是”。但是它感觉很粗糙。有没有更好或更自然的方法来实现这一点

MCMC.sample(100000, burn=500, thin=5)
print MCMC.stats()['rate_x']['quantiles']