Questions tagged «mcmc»

马尔可夫链蒙特卡罗(MCMC)是指通过从固定分布为目标分布的马尔可夫链中生成随机数,从目标分布中生成样本的方法。当更直接的随机数生成方法(例如反演方法)不可行时,通常使用MCMC方法。第一种MCMC方法是Metropolis算法,后来又修改为Metropolis-Hastings算法。

3
估计动态线性模型的参数
我要实现(在R中)以下非常简单的动态线性模型,对于该模型,我有2个未知的时变参数(观察误差的方差和状态误差的方差\ epsilon ^ 2_t)。ϵ1tϵt1\epsilon^1_tϵ2tϵt2\epsilon^2_t ÿŤθt + 1==θŤ+ ϵ1个ŤθŤ+ ϵ2ŤYt=θt+ϵt1θt+1=θt+ϵt2 \begin{matrix} Y_t & = & \theta_t + \epsilon^1_t\\ \theta_{t+1} & = & \theta_{t}+\epsilon^2_t \end{matrix} 我想在每个时间点估计这些参数,而不会产生任何前瞻性偏差。据我了解,我可以使用MCMC(在滚动窗口上避免向前看的偏差),也可以使用粒子滤波器(或顺序蒙特卡洛-SMC)。 哪种方法你使用,和 什么是这两种方法的利弊? 奖励问题:在这些方法中,如何选择参数的变化速度?我猜我们必须在这里输入信息,因为在使用大量数据估算参数与使用较少数据对参数更改做出更快反应之间存在讨价还价?
11 r  mcmc  dlm  particle-filter 

3
是否有调试MCMC程序的标准技术?
调试MCMC程序非常困难。出现此困难的原因是几个问题,其中一些是: (a)算法的循环性质 我们迭代绘制以所有其他参数为条件的参数。因此,如果实现不能正常工作,则很难隔离错误,因为问题可能存在于迭代采样器中的任何地方。 (b)正确答案不一定是已知的。 我们无法告诉我们是否已经实现融合。在某种程度上,可以通过在模拟数据上测试代码来缓解这种情况。 鉴于上述问题,我想知道是否存在可用于调试MCMC程序的标准技术。 编辑 我想分享我用来调试自己的程序的方法。我当然会做PeterR提到的所有事情。除此之外,我还使用模拟数据执行以下测试: 从真实值开始所有参数,并查看采样器是否偏离真实值太远。 我在迭代采样器中具有每个参数的标志,这些标志确定我是否在迭代采样器中绘制该参数。例如,如果将标志“ gen_param1”设置为true,则在迭代采样器中从其完整条件中提取“ param1”。如果将其设置为false,则将'param1'设置为其真实值。 完成采样器的编写后,我将使用以下配方测试程序: 将一个参数的generate标志设置为true,将其他所有参数设置为false,并评估关于真实值的收敛性。 结合第一个参数设置另一个参数的generate标志,然后再次评估收敛性。 以上步骤对我非常有用。
11 mcmc 

2
为什么对MCMC采样器有反对使用Jeffreys或基于熵的先验的建议?
Stan的开发人员在其Wiki页面上指出: 我们不喜欢的一些原理:不变性,杰弗里斯,熵 相反,我看到了很多正态分布建议。到目前为止,我使用了不依赖于采样贝叶斯方法,并且是那种高兴地明白了为什么是二项式可能性的不错选择。θ 〜贝塔( α = 12,β= 12)θ〜贝塔(α=1个2,β=1个2)\theta \sim \text{Beta}\left(\alpha=\frac{1}{2},\beta=\frac{1}{2}\right)
11 bayesian  mcmc  prior  pymc  stan 

1
R / mgcv:为什么te()和ti()张量积产生不同的曲面?
的mgcv软件包R具有两个功能,用于拟合张量积相互作用:te()和ti()。我了解两者之间的基本分工(拟合非线性交互与将这种交互分解为主要效果和交互)。我不明白的是为什么te(x1, x2)而ti(x1) + ti(x2) + ti(x1, x2)可能产生(略)不同的结果。 MWE(改编自?ti): require(mgcv) test1 <- function(x,z,sx=0.3,sz=0.4) { x <- x*20 (pi**sx*sz)*(1.2*exp(-(x-0.2)^2/sx^2-(z-0.3)^2/sz^2)+ 0.8*exp(-(x-0.7)^2/sx^2-(z-0.8)^2/sz^2)) } n <- 500 x <- runif(n)/20;z <- runif(n); xs <- seq(0,1,length=30)/20;zs <- seq(0,1,length=30) pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30))) truth <- matrix(test1(pr$x,pr$z),30,30) f <- test1(x,z) y <- f + rnorm(n)*0.2 par(mfrow = c(2,2)) # …
11 r  gam  mgcv  conditional-probability  mixed-model  references  bayesian  estimation  conditional-probability  machine-learning  optimization  gradient-descent  r  hypothesis-testing  wilcoxon-mann-whitney  time-series  bayesian  inference  change-point  time-series  anova  repeated-measures  statistical-significance  bayesian  contingency-tables  regression  prediction  quantiles  classification  auc  k-means  scikit-learn  regression  spatial  circular-statistics  t-test  effect-size  cohens-d  r  cross-validation  feature-selection  caret  machine-learning  modeling  python  optimization  frequentist  correlation  sample-size  normalization  group-differences  heteroscedasticity  independence  generalized-least-squares  lme4-nlme  references  mcmc  metropolis-hastings  optimization  r  logistic  feature-selection  separation  clustering  k-means  normal-distribution  gaussian-mixture  kullback-leibler  java  spark-mllib  data-visualization  categorical-data  barplot  hypothesis-testing  statistical-significance  chi-squared  type-i-and-ii-errors  pca  scikit-learn  conditional-expectation  statistical-significance  meta-analysis  intuition  r  time-series  multivariate-analysis  garch  machine-learning  classification  data-mining  missing-data  cart  regression  cross-validation  matrix-decomposition  categorical-data  repeated-measures  chi-squared  assumptions  contingency-tables  prediction  binary-data  trend  test-for-trend  matrix-inverse  anova  categorical-data  regression-coefficients  standard-error  r  distributions  exponential  interarrival-time  copula  log-likelihood  time-series  forecasting  prediction-interval  mean  standard-error  meta-analysis  meta-regression  network-meta-analysis  systematic-review  normal-distribution  multiple-regression  generalized-linear-model  poisson-distribution  poisson-regression  r  sas  cohens-kappa 


5
Metropolis Hastings算法
我需要研究马尔可夫链蒙特卡罗方法,更具体地说,我需要研究Metropolis Hastings算法及其所有类似收敛准则的算法。 谁能给我开一本书,一本论文或一个网站,用简单的术语解释这一论点,却又不琐碎?
11 references  mcmc 

2
广义正态分布的提案分布
我正在使用具有概率密度函数的广义正态分布(维基百科条目)来模拟植物扩散。 b2aΓ(1/b)e−(da)bb2aΓ(1/b)e−(da)b \frac{b}{2a\Gamma(1/b)} e^{-(\frac{d}{a})^b} 其中是行进距离,是比例参数,是形状参数。平均行驶距离由以下分布的标准偏差给出:dddaaabbb a2Γ(3/b)Γ(1/b)−−−−−−−−√a2Γ(3/b)Γ(1/b) \sqrt{\frac{a^2 \Gamma(3/b)}{\Gamma(1/b)}} 这是方便的,因为它允许以指数形式时,高斯形状时,并且对于尖峰厚尾分布时。这种分布在植物传播文献中经常出现,尽管通常它很少见,因此很难找到有关的信息。b=1b=1b=1b=2b=2b=2b&lt;1b&lt;1b<1 最有趣的参数是和平均分散距离。bbb 我正在尝试使用MCMC 估算和,但是我正在努力想出一种有效的方法来对提案价值进行抽样。到目前为止,我已经使用Metropolis-Hastings,并且从和均匀分布中得出,并且我得到的后平均分散距离约为200-400米,这确实具有生物学意义。但是,收敛确实很慢,并且我不确信它正在探索整个参数空间。aaabbb0&lt;a&lt;4000&lt;a&lt;4000 < a < 400 0&lt;b&lt;30&lt;b&lt;3 0 < b<3 为和分配更好的提案分配是棘手的,因为它们彼此依赖,而没有太多意义。平均分散距离确实具有明确的生物学意义,但是给定的平均分散距离可以用和许多组合来解释。因此,和在后面相关。aaabbbaaabbbaaabbb 到目前为止,我已经使用了Metropolis Hastings,但是我对在这里可以使用的其他算法持开放态度。 问题:有人可以建议一种更有效的方法来绘制和投标值吗?aaabbb 编辑:关于系统的其他信息:我正在研究沿山谷的植物种群。目的是确定花粉在供体植物和它们授粉的植物之间传播的距离分布。我的数据是: 每个可能的花粉供体的位置和DNA 从已经生长并进行基因分型的60种母本植物(即花粉接受者)的样品中收集的种子。 每个母本植物的位置和DNA。 我不知道供体植物的身份,但是可以通过确定哪些供体是每株幼苗的父亲,从遗传数据中推论得出。假设此信息包含在概率矩阵G中,每个后代都有一行,每个候选供体都有一列,这仅根据遗传数据就可以得出每个候选者是每个后代的父亲的概率。G需要大约3秒钟的时间来计算,并且每次迭代都需要重新计算,这大大降低了速度。 由于我们通常期望更接近的候选人捐赠者更有可能是父亲,因此,如果您共同推断父子关系和分散父子关系,则父子关系推断会更准确。矩阵D具有与G相同的维度,并且仅基于母体与候选者之间的距离和某些参数向量的函数包含父系概率。在给定遗传和空间数据的情况下,D和G中的相乘元素给出了父权的联合概率。乘积值的乘积给出了离散模型的可能性。 如上所述,我一直在使用GND来建模色散。实际上,我实际上使用了GND和均匀分布的混合体,以允许非常遥远的候选者仅由于偶然性(遗传杂乱)而具有较高的亲子关系可能性(如果忽略,这会使GND的明显尾部膨胀)。因此,扩散距离的概率为:ddd cPr(d|a,b)+(1−c)NcPr(d|a,b)+(1−c)N c \Pr(d|a,b) + \frac{(1-c)}{N} 其中是到GND的散布距离的概率,N是候选者的数量,而()确定GND对散布的贡献。Pr(d|a,b)Pr(d|a,b)\Pr(d|a,b)ccc0&lt;c&lt;10&lt;c&lt;10< c <1 因此,还有两个额外的考虑因素会增加计算负担: 色散距离是未知的,但必须在每次迭代中进行推断,而创建G来做到这一点非常昂贵。 有第三个参数进行积分。ccc 由于这些原因,在我看来,执行网格插值过于复杂,但我很高兴被说服。 例 这是我使用的python代码的简化示例。我简化了从遗传数据中对亲子关系的估计,因为这将涉及很多额外的代码,并将其替换为0到1之间的值矩阵。 首先,定义函数以计算GND: import numpy as np …

1
是否有实现的Monte Carlo / MCMC采样器可以处理后验分布的局部局部最大值?
我目前正在使用贝叶斯方法来估计由多个ODE组成的模型的参数。由于我有15个参数可以估计,因此我的采样空间是15维的,而我寻找的后验分布似乎有很多局部最大值,这些最大值被非常低概率的大区域非常孤立。 这导致了我的蒙特卡洛链的混合问题,因为一个链不太可能“跳出”一个局部最大值并偶然碰到另一个最大值。 在该领域似乎有很多研究,因为它很容易找到解决这个问题的论文(见下文),但是很难找到一个实际的实现。我只发现了与分子动力学有关的软件包,而没有贝叶斯推断。是否有(MC)MC采样器的实现能够处理孤立的局部最大值? 我被迫与Matlab一起工作,因为那是我编写的ODE模型所编写的,所以最欢迎有关Matlab的建议;-)。但是,如果有其他语言的“杀手级应用”,也许我可以说服我的PI切换;-)。 我目前正在使用由Haario,L​​aine等人撰写的“延迟拒绝/自适应蒙特卡洛”采样器。,这也是迄今为止我所能找到的唯一一个比标准Metropolis-Hastings算法更复杂的采样器 值得注意的方法似乎是: 编辑于2017年3月7日更新了我在此期间学到的知识 具有不同起点的多个相似链 链间适应。使用多个独立链生成的合并样本的经验协方差矩阵来更新链提案分布的协方差矩阵。(1) 不同回火的多条链 回火: 某种“温度”似乎改变了后部景观,使链条更可能混合。(我还没有深入探讨这一问题)(1)调节的目的是使由后验概率分布形成的(高维)概率态势平坦。通常通过将后验概率乘以的幂来实现,其中后方景观在变平(3,p.298)。这意味着,代替计算状态的后验概率,给定数据可以计算出回火后验概率1/T1/T1/TT&gt;1T&gt;1T>1p(θ∣D)p(θ∣D)p(\theta\mid D)θθ\thetaDDD p(θ∣D)1/T∝(p(D∣θ)⋅p(θ))1/Tp(θ∣D)1/T∝(p(D∣θ)⋅p(θ))1/Tp(\theta\mid D)^{1/T} \propto \left( p(D\mid\theta)\cdot p(\theta)\right)^{1/T} 选择的越高,概率图中的峰越平坦越宽。因此,较高的值导致采样器从一个局部最大值切换到另一个局部最大值的可能性更高。但是,不是搜索的后验分布 。因此,必须使用该分布的样本链来启用之后的采样。TTTTTTp(θ∣D)1/Tp(θ∣D)1/Tp(\theta\mid D)^{1/T}T≠1T≠1T\neq1p(θ∣D)p(θ∣D)p(\theta\mid D) 原始的,未回火的后验分布的样本,可以通过几种方法从该分布的回火版本得到样本: 大都会耦合的MCMC同时运行多个链,每个链具有不同但恒定的值。概率性地切换两个链的状态。仅将的链中的样本用于下游估计;其他链只需确保对所有峰进行了采样。参考 (4)具有并行算法,并为此主题引用了会议文章和教科书(5,6)TTTT=1T=1T=1 小世界MCMC。采样器在两个建议之间切换。大多数情况下,使用差异较小的提案分布,很少使用差异较大的提案。这两个建议之间的选择是随机的。差异较大的建议也可以从另一个链中得出,该链只会产生很大的跳跃,以粗糙的方式尽可能多地采样(2,7) 哈密​​尔顿蒙特卡洛(HMC) 我对此了解不多,但是JAGS的No-U-Turn采样器(NUTS) 似乎在使用它。参见参考。(8)。Alex Rogozhnikov创建了关于该主题的可视教程。 参考文献: (1)Craiu等,2009:向邻居学习:并行链和区域自适应MCMC。 J Am Stat Assoc 104:488,第1454-1466页。http://www.jstor.org/stable/40592353 (2)关岛等,2012:带回火的小世界MCMC:人为性和光谱缺口。https://arxiv.org/abs/1211.4675(仅在arXiv上) (3):Brooks等。(2011)。马尔可夫链手册蒙特卡洛。CRC出版社。 (4):Altekar等。(2004):平行大都会耦合马尔可夫链蒙特卡洛用于贝叶斯系统发生推断。Bioinformatics 20(3)2004,第407–415页,http: //dx.doi.org/10.1093/bioinformatics/btg427 (5):盖耶(Geyer CJ)(1991)马尔可夫链蒙特卡罗最大似然。在:Keramidas(ed。),《计算科学与统计:接口》第23届会议论文集。接口基金会,费尔法克斯站,第156–163页。 (6):Gilks​​ WR和Roberts GO(1996)。改善MCMC的策略。在:实践中的Gilks​​ WR,Richardson S和Spiegelhalter(eds) …

1
防止帕累托平滑重要性抽样(PSIS-LOO)失败
我最近开始使用帕累托平滑重要性抽样留一法交叉验证(PSIS-LOO),这些论文对此进行了介绍: Vehtari,A.&Gelman,A.(2015年)。帕累托平滑重要性抽样。arXiv预印本(链接)。 Vehtari,A.,Gelman,A.,&Gabry,J.(2016年)。使用留一法交叉验证和WAIC的实用贝叶斯模型评估。arXiv预印本(链接) 这代表了一种非常好的样本外模型评估方法,因为它允许通过一次MCMC运行就可以执行LOO-CV,并且据称比现有的信息标准(例如WAIC)更好。 k^ik^i\hat{k}_ik^i≳0.7k^i≳0.7\hat{k}_i \gtrsim 0.7 不幸的是,我发现在将该方法应用于问题时,对于大多数感兴趣的模型,我发现的很大一部分。毫不奇怪,一些报告的LOO对数似然显然是毫无意义的(与其他数据集相比)。作为双重检查,我执行了传统的(且费时的)10倍交叉验证,发现确实在上述情况下,PSIS-LOO给出了非常错误的结果(从正面来看,结果与10所有的模型的CV。作为记录,我使用的是Aki Vehtari的PSIS-LOO 的MATLAB实现。k^i≫0.7k^i≫0.7\hat{k}_i \gg 0.7k^i≪0.7k^i≪0.7\hat{k}_i \ll 0.7 也许我很倒霉,因为我目前应用此方法的第一个问题对PSIS-LOO来说“困难”,但是我怀疑这种情况可能相对普遍。对于像我这样的案例,Vhttary,Gelman&Gabry的论文简单地说: 即使PSIS估计具有有限的方差,当,用户也应考虑针对有问题的直接从进行采样,请使用倍交叉验证,或使用更可靠的模型。k^&gt;0.7k^&gt;0.7\hat{k} > 0.7p(θs|y−i)p(θs|y−i)p(\theta^s |y_{−i})iiikkk 这些是显而易见的但不是真正理想的解决方案,因为它们都很费时或需要额外的摆弄(我很欣赏MCMC 和模型评估都是摆弄,但越少越好)。 我们是否可以预先应用任何常规方法来尝试防止 PSIS-LOO失败?我有一些初步的想法,但我想知道人们是否已经采用了经验方法。

1
在MCMC中管理高自相关
我正在为使用R和JAGS的元分析建立一个相当复杂的分层贝叶斯模型。简化了一下,该模型的两个关键级别具有 其中是的第观察研究终点(在这种情况下,是转基因作物与非转基因作物的产量),是研究的影响, s是各种研究水平变量的影响(通过函数族和索引完成了研究,作物种类,研究方法等)ÿ我Ĵ= αĴ+ ϵ一世ÿ一世Ĵ=αĴ+ϵ一世 y_{ij} = \alpha_j + \epsilon_i αĴ= ∑Hγh (j )+ ϵĴαĴ=∑HγH(Ĵ)+ϵĴ\alpha_j = \sum_h \gamma_{h(j)} + \epsilon_jÿ我Ĵÿ一世Ĵy_{ij}一世一世iĴĴjαĴαĴ\alpha_jĴĴjγγ\gammaHHhϵϵ\epsilons是错误术语。请注意,不是虚拟变量的系数。相反,对于不同的研究水平值,存在不同的变量。例如,有为发展中国家和发达国家。 γγ\gammaγγ\gammaγde v e l o p 我Ñ 克γdËvË升Øp一世ñG\gamma_{developing}γdÈ v Ë 升ö p ë dγdËvË升ØpËd\gamma_{developed} 我主要对估算的值感兴趣。这意味着从模型中删除研究级别的变量不是一个好的选择。 γγ\gamma 一些研究水平变量之间具有高度相关性,我认为这在我的MCMC链中产生了很大的自相关性。此诊断图说明了链轨迹(左)和所得的自相关(右): 自相关的结果是,我从4个每10,000个样本的链中获得了60-120的有效样本量。 我有两个问题,一个是客观的,另一个是主观的。 除了细化,添加更多链和使采样器运行更长时间之外,我还可以使用哪些技术来管理此自相关问题?“管理”是指“在合理的时间内得出合理的估计”。在计算能力方面,我正在MacBook Pro上运行这些模型。 自相关程度有多严重?此处和John Kruschke博客上的讨论都表明,如果我们将模型运行足够长的时间,“笨拙的自相关可能已经全部消除了”(Kruschke),因此这并不是什么大问题。 这是产生上面的图的模型的JAGS代码,以防万一有人有兴趣浏览细节的情况: model { for (i in 1:n) …

2
烧录后的MCMC迭代能否用于密度估计?
老化后,我们是否可以直接使用MCMC迭代进行密度估计,例如通过绘制直方图或核密度估计?我担心的是,尽管MCMC迭代最多是相同分布的,但它们不一定是独立的。 如果我们进一步将细化应用于MCMC迭代该怎么办?我担心的是,MCMC迭代最多是不相关的,并且尚未独立。 我通过Glivenko–Cantelli定理学习了将经验分布函数用作真实分布函数估计的基础,其中经验分布函数是基于iid样本计算的。我似乎看到了一些使用直方图或核密度估计作为密度估计的理由(渐近结果?),但我不记得他们了。


3
使用MCMC评估高维函数的期望值
我正在从事与优化相关的研究项目,最近有了一个在此环境中使用MCMC的想法。不幸的是,我对MCMC方法还很陌生,所以我有几个问题。我将从描述问题开始,然后问我的问题。 我们的问题归结为估算成本函数其中是密度为的维随机变量。。c(ω)c(ω)c(\omega)ω=(ω1,ω2,...ωh)ω=(ω1,ω2,...ωh)\omega = (\omega_1,\omega_2,...\omega_h)hhhf(ω)f(ω)f(\omega) 在我们的情况下,不存在的封闭形式版本。这意味着我们必须使用蒙特卡洛方法来近似期望值。不幸的是,事实证明,使用MC或QMC方法生成的E [ c (ω )]估计值差异太大,无法在实际环境中使用。c(ω)c(ω)c(\omega)E[c(ω)]E[c(ω)]E[c(\omega)] 一个想法是,我们必须使用重要性采样分布来生成采样点,该采样点将产生的低方差估计E[c(ω)]E[c(ω)]E[c(\omega)]。在我们的案例中,理想重要性抽样分布g(ω)g(ω)g(\omega)必须与大致成比例c(ω)f(ω)c(ω)f(ω)c(\omega)f(\omega)。看看如何知道g(ω)g(ω)g(\omega)直到常数,我想知道是否可以将MCMC与提案分布c(ω)f(ω)c(ω)f(ω)c(\omega)f(\omega)最终从产生样本g(ω)g(ω)g(\omega)。 我的问题是: 可以在此设置中使用MCMC吗?如果是这样,哪种MCMC方法合适?我在MATLAB中工作,因此我偏爱已经具有MATLAB实现的任何内容。 有什么我可以用来加速MCMC老化时间的技术。我怎么知道已经达到平稳分布?在这种情况下,对于给定的ω实际上需要花费相当多的时间来计算。c(ω)c(ω)c(\omega)ωω\omega

2
JAGS中的审查/截断
我有一个关于如何在JAGS中解决审查问题的问题。 我观察到X值存在测量误差的双变量混合法线。我想对观察到的检查值的真正基础“手段”建模。 ⌈ X牛逼[R ü è+ ε ⌉ = Xø b 小号Ë - [R v ë d ε 〜Ñ(0 ,s ^ d= .5 )⌈XŤ[RüË+ϵ⌉=XØbsË[RvËd ϵ〜ñ(0,sd=.5)\begin{align*} \lceil x_{true}+\epsilon \rceil = x_{observed} \ \epsilon \sim N(0,sd=.5) \end{align*} 这是我现在所拥有的: for (i in 1:n){ x[i,1:2]~dmnorm(mu[z[i],1:2], tau[z[i],1:2,1:2]) z[i]~dcat(prob[ ]) } Y也有测量误差。我想做的是这样的: for (i in 1:n){ …

5
根据经验数据生成随机多元值
我正在使用蒙特卡洛(Monte Carlo)函数对具有部分相关收益的几种资产进行估值。目前,我只是生成协方差矩阵并将其馈送到rmvnorm()R中的函数。(生成相关的随机值。) 但是,从资产收益的分布来看,它不是正态分布的。 这实际上是一个由两部分组成的问题: 1)当我拥有的只是一些真实世界的数据而没有已知分布时,我如何估算某种PDF或CDF? 2)我如何生成相关值(例如rmvnorm),但对于这种未知(非正态)分布呢? 谢谢! 分布似乎不适合任何已知的分布。我认为假设参数然后将其用于蒙特卡洛估计将非常危险。 我是否可以查看某种引导程序或“经验蒙特卡洛”方法?
10 mcmc  monte-carlo  pdf 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.