问题标签 [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.
c++ - 模板化的 Barton 和 Nackman 技巧问题
我正在尝试使用 Barton 和 Nackman 技巧来实现类以避免动态调度。(我正在编写性能很重要的 MCMC 代码。)我不是 C++ 专家,但基本技巧在其他地方对我有用。但是,我现在遇到了需要对第二个派生类进行模板化的情况。这似乎会引起问题。我的代码大纲是:
问题template<class DerivedParameterType>
如下<GibbsStep>
(来自巴顿和纳克曼的把戏)。使用 g++ v 4.01 (OSX),我收到以下错误:
如果删除template<class DerivedParameterType>
并替换DerivedParameterType
为double
.
有任何想法吗?
r - MCMClogit 混乱
任何人都可以向我解释为什么
总是导致 MCMC 接受率为 0?任何解释将不胜感激!
linux - 如何在 JAGS 中定义自定义分布?
我正在使用 JAGS 来模拟一些 MCMC 分布。我看到了对大量分布的支持。但是,我想从 JAGS 中不受限制的特定分布中抽取样本。有谁知道如何编写我们自己的自定义发行版?
谢谢!
c - Matlab(相对于 C/FORTRAN)对于 21 世纪的专业数学研究人员来说是一种受人尊敬的语言吗?
我是matlab的死忠用户,主要是因为这是我首先学到的,而且我还没有遇到过足够大的差异来切换的问题。我来自数值优化/线性代数,在那里我在数百万个自由度中进行了优化和特征值计算。最近,我进入了随机的领域,我原本的印象是我会被迫改变。但是,在优化代码并仔细初始化随机数生成器的种子之后,我能够在大致相同的时间内完成与我同时代人相同的蒙特卡洛任务。我的理解是,基本级别的“if”语句等在 matlab 中要慢得多。但是,如果每个循环中有大量可以矢量化的计算,我' m 不相信 C 会更好。而且,无论如何,matlab 似乎做得很好,从某种意义上说,我的上限不亚于任何其他专业人士(而且在许多情况下,似乎更多)。我有一种感觉,我会从这里的亲 C 人那里得到很多回应,他们很久以前就将 matlab 视为一些琐碎的玩具语言。我是一名专业研究人员,我认为 matlab 在最高水平的计算密集型数学规划方面具有竞争力。我错了吗 ?我是否需要考虑更改为较低级别的语言,例如 C/FORTRAN ?为什么或者为什么不 ?还有像我这样的人吗?非常感谢!干杯 我有一种感觉,我会从这里的亲 C 人那里得到很多回应,他们很久以前就将 matlab 视为一些琐碎的玩具语言。我是一名专业研究人员,我认为 matlab 在最高水平的计算密集型数学规划方面具有竞争力。我错了吗 ?我是否需要考虑更改为较低级别的语言,例如 C/FORTRAN ?为什么或者为什么不 ?还有像我这样的人吗?非常感谢!干杯 我有一种感觉,我会从这里的亲 C 人那里得到很多回应,他们很久以前就将 matlab 视为一些琐碎的玩具语言。我是一名专业研究人员,我认为 matlab 在最高水平的计算密集型数学规划方面具有竞争力。我错了吗 ?我是否需要考虑更改为较低级别的语言,例如 C/FORTRAN ?为什么或者为什么不 ?还有像我这样的人吗?非常感谢!干杯
openmp - OpenMP 中的有序“for”循环效率
我正在尝试并行化一个本质上是顺序的单个 MCMC 链,因此,我需要保留正在执行的迭代的顺序。为此,我正在考虑通过 OpenMP 使用“ordered for”循环。我想知道在 OpenMP 中执行有序 for 循环是如何工作的,它真的在代码并行化方面提供了任何加速吗?
谢谢!
c - 如何使用 Metropolis-Hastings 算法将 C 或 C++ 代码合并到我的 R 代码中以加速 MCMC 程序
我正在寻求有关如何使用 Metropolis-Hastings 算法将 C 或 C++ 代码合并到我的 R 代码中以加速 MCMC 程序的建议。在给定各种协变量的情况下,我正在使用 MCMC 方法来模拟个人将被第三方(法官)在社会地位等级中分配特定等级的可能性:询问每位法官(约 80 名,跨越 4 个村庄)根据他们对每个人的社会地位的评估,对一组人(约 80 人,跨越 4 个村庄)进行排名。因此,对于每个法官,我都有一个等级向量,对应于他们对每个人在层次结构中的位置的判断。
为了对此建模,我假设在分配等级时,法官的决定是基于个人效用的某种潜在衡量标准u的相对价值。鉴于此,可以假设给定法官产生的等级向量r是未观察到的向量u的函数,它描述了被排名的个人的效用,其中u的第 k 个最高值的个人将被分配第k 个等级。我使用感兴趣的协变量对u进行建模,将其作为多元正态分布变量,然后在给定模型生成的u分布的情况下确定观察到的等级的可能性。
除了估计最多 5 个协变量的影响之外,我还估计了描述评委和项目之间差异的超参数。因此,对于链的每次迭代,我估计多元正态密度大约为 8-10 次。因此,5000 次迭代可能需要长达 14 小时。显然,我需要运行它超过 5000 次,所以我需要一种方法来显着加快这个过程。鉴于此,我的问题如下:
(i) 我是否正确地假设通过在 C 或 C++ 中运行一些(如果不是全部)我的链可以获得最佳速度增益?
(ii) 假设问题 1 的答案是肯定的,我该怎么做?例如,有没有办法让我保留我所有的 R 函数,但只需在 C 或 C++ 中执行循环:即我可以从 C 调用我的 R 函数然后执行循环吗?
(iii) 我想我真正想知道的是如何最好地将 C 或 C++ 代码合并到我的程序中。
python - 使用 PyMC 进行双重积分
我需要使用MCMC 方法执行双重积分。我已经使用romberg和doublequad集成完成了它,结果正确。我还需要使用 MCMC 集成来比较结果。我发现很难理解PyMC。
大纲是这样的:我有一些时间序列数据,我需要找出适合它的分布。我有一组方程式告诉我该做什么涉及双重积分。
希望得到一些指导。
performance - 优化简单的 Common Lisp gibbs 采样程序
作为练习,我在Darren Wilkinson的博客文章Gibbs sampler 中用各种语言(重新访问)重写了示例程序。
代码如下所示。这段代码在我(5 岁的)机器上运行大约 53 秒,使用 SBCL 1.0.56,使用 buildapp 创建核心映像,然后运行它
因为这是计算帖子中其他语言的时间的方式,所以我想我会做一些类似的事情。帖子中的 C 代码运行大约 25 秒。如果可能的话,我想尝试加速 Lisp 代码。
然后我用asgibbs
调用构建了可执行文件sh gibbs.sh
gibbs.sh
使用 SBCL 1.0.56 进行编译时,我得到了 6 个编译器注释,它们在下面重现。我不知道该怎么处理他们,但会感谢任何提示。
更新 1:Rainer Joswig 的回答指出 SQRT 的参数可能是否定的,这是我看到的晦涩编译器注释的来源,即
编译器抱怨说,由于它不知道参数的值是否为正,结果可能是一个复数。由于在示例中,该值x
是来自 gamma 分布的样本变量,因此它始终大于 0。Stephan 在 SBCL 用户邮件列表中很有帮助地指出了这一点,(请参阅线程“优化简单的 Common Lisp”中的第二条消息Gibbs 采样程序”,这可以通过声明 x 大于或零来解决,如下所示,
有关FLOAT 类型 和 间隔指示符的相关文档,请参阅 Common Lisp Hyperspec 。
这似乎加快了代码速度。它现在可靠地低于 52 秒,但仍然没有太大的进步。这也留下了关于
如果由于某种原因无法修复,我想知道原因。此外,无论如何,对注释含义的解释会很有趣。具体来说,这个词pointer
在这里是什么意思?这与调用 C 函数的事实有关吗?此外,成本 13 似乎不是很有用。正在测量什么?
此外,Rainer 建议可以减少 consing,这可能会减少运行时间。我不知道是否可以减少 consing,或者是否会减少运行时间,但我会对意见和方法感兴趣。总体而言,似乎没有太多可以提高此功能的性能。也许它太小太简单了。
python - 后验分布 MCMC 的 Fisher 信息
我使用的方法需要我计算后验分布的 Fisher 信息(关于所有超参数)。我目前拥有的是来自后验分布的蒙特卡洛样本。我觉得我可以分别通过二阶和一阶导数的样本均值和协方差来使用和近似这些,但我正在寻找一种更有效的方法。
但是,有人建议我使用,optim(..., Hessian=TRUE)
但是我看不出优化例程有什么帮助。
r - R代码mcmcplots函数
有没有办法让 Rmcmcplot()
函数在调用时不打开浏览器?我需要在集群上运行我的 R 代码,如果mcmcplot()
尝试打开浏览器,它会呕吐。
可以将输出转储到文件中吗?