问题标签 [mcmc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
845 浏览

python - PyMC 中的复合模型

我正在尝试使用 PyMC 2.3 来获得对复合模型参数的估计。“复合”是指遵循分布的随机变量,其参数是另一个随机变量。(“嵌套”或“分层”有时用于指代这种情况,但我认为它们不太具体,并且在这种情况下会产生更多混乱)。

让我们举一个具体的例子。“真实”数据是从复合分布生成的,该分布是泊松,其参数分布为指数。在普通 scipy 中,数据生成如下:

我想获得模型参数的估计值tau_true。到目前为止,我在 PyMC 中对这个问题进行建模的方法如下:

请注意,我size=nsamples曾经为每个样本设置一个新的随机变量。

最后,我将 MCMC 运行为:

该模型收敛(虽然缓慢,> 10^5 次迭代)到以 50 ( tau_true) 为中心的分布。然而,定义 1000 个随机变量来拟合具有单个参数的单个分布似乎有点过头了。

有没有更好的方法来描述 PyMC 中的复合模型?

PS我也尝试了更丰富的先验(tau = pm.Normal('tau', mu=51, tau=1/2**2)),但结果相似,收敛仍然很慢。

0 投票
1 回答
752 浏览

r - 如何将 OpenBUGS Coda 文件转换为 R 中的 mcmc 对象?

我使用了 OpenBUGS,它产生了 MCMC 输出的 coda 文件。要计算和绘制 Gelman Rubin 和 Geweke 诊断,我需要将此 coda.odc 文件转换为 R 中的 mcmc 对象吗?有没有办法做到这一点?或者你是否推荐我一些其他的方法来做这个分析?

谢谢

0 投票
1 回答
1360 浏览

python - PyMC 观察到随机变量总和的数据

我正在尝试使用 PyMC 推断模型参数。特别是观察到的数据被建模为两个不同随机变量的总和:负二项式和泊松。

在 PyMC 中,随机变量的代数组合由“确定性”对象描述。是否可以将观察到的数据分配给这个确定性对象?

如果不可能,我们仍然知道总和的 PDF 是分量的 PDF 的卷积。有什么技巧可以有效地计算这个卷积吗?

0 投票
1 回答
1601 浏览

python - 如何在 PyMC 中定义通用确定性函数

在我的模型中,我需要使用复杂的 python 函数从一组父变量中获取确定性变量的值。

有可能这样做吗?

以下是一个 pyMC3 代码,它显示了我在简化情况下尝试做的事情。

当我运行此代码时,在 y_hat 阶段出现错误,因为int()函数内部的FindFromGrid(x,w,z)函数需要整数而不是 FreeRV。

从预先计算的网格中查找y_hat很重要,因为我的 y_hat 真实模型没有要表达的分析形式。

我之前曾尝试使用 OpenBUGS,但在这里我发现在 OpenBUGS 中无法做到这一点。PyMC 有可能吗?

更新

基于 pyMC github 页面中的示例,我发现我需要将以下装饰器添加到我的FindFromGrid(x,w,z)函数中。

这似乎解决了上述问题。但我不能再使用 NUTS 采样器了,因为它需要渐变。

大都会似乎没有融合。

在这种情况下,我应该使用哪种步骤方法?

0 投票
1 回答
1188 浏览

bayesian - 使用 pymc3 拟合学生的 t 分布

不确定我是在做一些愚蠢的事情还是 pymc3 有错误,但是尝试将 T 分布拟合到正常值我得到了自由度数(0.18 到 0.25,我期望值很高,至少 4-5)。当然,如果我尝试具有合理数量的自由度(例如 3 或 5)的 T 分布,我会得到同样的错误。

你能建议一些修复(改变先验,抽样方法)吗?

0 投票
2 回答
1074 浏览

python - 我应该如何在 PyMC 中使用 @pm.stochastic?

相当简单的问题:我应该如何使用@pm.stochastic?我已经阅读了一些声称@pm.stochastic期望负对数值的博客文章:

我最近尝试了这个,但发现结果非常糟糕。因为我还注意到有些人使用 np.log 而不是 -np.log,所以我试了一下,效果更好。真正期待的是什么@pm.stochastic?我猜由于一个非常流行的例子使用了类似np.log(1/(1+t_1-t_0))这样的东西,因此所需的标志有点混乱-np.log(1+t_1-t_0)

另一个问题:这个装饰器对value参数做了什么?据我了解,我们从需要输入可能性的先验的一些建议值开始,其想法@pm.stochastic基本上是产生一些数字,以将此可能性与采样过程中先前迭代生成的数字进行比较。可能性应该收到value先验的参数和一些值,但我不确定这是否全部value都在做,因为这是唯一需要的参数,但我可以写:

据我所知,这会产生与以前相同的结果。也许,它是这样工作的,因为我添加observed=True了装饰器。如果我在observed=False默认情况下在随机变量中尝试此操作,value则在每次迭代中都会更改以尝试获得更好的可能性。

0 投票
0 回答
335 浏览

python - 使用 numpy 向量化

我正在尝试使用数据增强来做一些贝叶斯概率代码。如果我遍历输出矩阵的行,我可以让它工作,但我想对它进行矢量化并一次性完成所有操作(可能会更快)。

如果我注释掉循环并使用上面注释掉的行,我会在前面指出的行(定义 sigma 的行)处收到以下错误:

0 投票
1 回答
712 浏览

python - PyMC 中的顺序更新

我正在自学 PyMC,但遇到了以下问题:

我有一个模型,其参数应由连续测量确定。开始时,参数的先验是无信息的,但应在每次测量后更新(即由后验代替)。简而言之,我想用 PyMC 进行顺序更新。

考虑以下(有些构造)示例:

  • 测量一:10道题,9道正确答案
  • 测量 2:5 个问题,3 个正确答案

当然,这可以用 beta/二项式共轭先验分析解决,但这不是重点:)

或者,可以将两个测量值组合为 n=15 和 k=12。然而,这太简单了。为了教育目的,我想采取艰苦的方式。

我在这个答案中找到了一个解决方案,其中新的先验是从后验中采样的。这几乎是我想要的,但是对先验的采样感觉有点混乱,因为结果取决于样本数量和其他设置。

我尝试的解决方案将测量和先验分别放在一个模型中,如下所示:

我怎样才能得到theta1作为先验的后验theta2?这甚至可能吗,还是我只是表现出对贝叶斯统计的终极无知?

0 投票
1 回答
114 浏览

python - 使用 MCMC 方法估计头部概率

我正在尝试了解贝叶斯参数估计,并在这里找到了一些非常好的教程(教程 1 和 2)。只是为了测试我的理解,我正在尝试实施 MCMC 方法来估计基于给定数据集获得正面的概率。输入数据集有 8 个头和 2 个尾。假设先验遵循 Beta(2,2),分析得出正面的概率 = (8+2)/(10+2+2) = 0.71。但是,当我尝试使用 Metropolis-hastings 算法时,我得到了非常不同的答案。任何人都可以在这里检查我的实现并解释我所缺少的

http://nbviewer.ipython.org/github/ragrawal/meetup/blob/master/notebook/MCMC.ipynb

0 投票
1 回答
1171 浏览

bayesian - 如何使用pymc在贝叶斯模型中进行面板数据分析

每个人。我有一个关于如何使用 pymc 在贝叶斯模型中进行面板数据分析的问题。数据是这样的:

现在,我有 N 个用户使用 T 次样本 (N≫T),以及自变量 (x1,x2,x3) 和因变量 (Y)。

现在,我想在集体层面分析 X 对 Y 的影响。以最简单的线性回归为例,参照《贝叶斯计量经济学导论》(PP.145)一书,一般模型常写为:

$$ y_{it} = x_{it}{\beta}+ w_{it}{b_i}+ {u_{it}}, i = 1,...,n;\;\;t = 1,。 ..,T $$

其中,$i$ 表示用户;$t$ 代表时间;${\beta}$ 在 $i$ 之间没有差异,称为固定效应;${b_i}$ 与 $i$ 不同,称为随机效应。

在贝叶斯看来,${\beta}$ 和 ${b_i}$ 都被视为随机变量。所以,设 ${\beta} $~$ N({\beta}_0,{\beta}_1)$, 和 ${b_i} $~$ N({\lambda_0},{\lambda_1})$

但是,这是理论上的一般思想,但我对如何在 pymc 中建模和拟合它没有任何想法。

感谢任何人给我一些灵感或示例代码。