我试图实现使用PyMC大数定律的一个很简单的例子。 我们的目标是产生不同大小的样品的许多示例平均值。 例如,在下面的代码,我正在5个样品多次服用组(samples_to_average = 5),计算它们的平均,和然后找到所得轨迹的95%CI。
下面的代码运行,但我想要做的就是修改samples_to_average是一个清单,这样我就可以计算置信区间在一个循环中的一系列不同的样本量。
import scipy.misc
import numpy as np
import pymc as mc
samples_to_average = 5
list_of_samples = mc.DiscreteUniform("response", lower=1, upper=10, size=1000)
@mc.deterministic
def sample_average(x=list_of_samples, n=samples_to_average):
samples = int(n)
selected = x[0:samples]
total = np.sum(selected)
sample_average = float(total) / samples
return sample_average
def getConfidenceInterval():
responseModel = mc.Model([samples_to_average, list_of_samples, sample_average])
mapRes = mc.MAP(responseModel)
mapRes.fit()
mcmc = mc.MCMC(responseModel)
mcmc.sample( 10000, 5000)
upper = np.percentile(mcmc.trace('sample_average')[:],95)
lower = np.percentile(mcmc.trace('sample_average')[:],5)
return (lower, upper)
print getConfidenceInterval()
大多数例子我使用确定性的装饰中使用全局变量随机看到。 然而,为了实现我的目标,我想我需要做的是建立在getConfidenceInterval()随机变量(正确的长度),并通过这sample_average(而不是使用全局/默认参数提供sample_average)。
如何能在getConfidenceInterval创建的变量()传递到sample_average(),或者是什么,我可以使用samples_to_average的不同值评估多个模型另一种方式? 我想如果可能的话,以避免全局变量。