Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R中gelman.plot MCMC诊断的in图等价

R中gelman.plot MCMC诊断的in图等价
EN

Stack Overflow用户
提问于 2017-01-14 20:24:33
回答 1查看 1.1K关注 0票数 1

我正在创建一系列的MCMC诊断图,在r使用am图。我意识到gg中已经有一个软件包可用于MCMC绘图,但其中大部分是为了我自己的教育和实际用途。有一件事我似乎搞不懂,那就是如何在ggplot框架中生成gelman.plot。

gelman.diag函数只返回一个简单的数据点,我想重新创建完整的运行图表,如gelman.plot所示。

是否有人熟悉gelman潜在的降尺度因子的算法结构和/或将其输出移植到ggplot的一种方法?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-14 22:43:48

您还没有提供一个可重复的示例,所以我使用了这里的例子。我们需要那个例子中的名为combinedchains的对象。为了避免混乱的答案,我把这方面的代码放在这篇文章的末尾。

现在我们可以在gelman.plot上运行combined.chains了。这就是我们想要复制的情节:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(coda)
gelman.plot(combined.chains)

要创建ggplot版本,我们需要获取绘图的数据。我以前还没有做过MCMC,所以我将让gelman.plot为我生成数据。对于实际用例,您可能只需直接生成适当的数据。

让我们看看gelman.plot正在做什么:我们可以通过在控制台中键入裸函数名来查看该函数的代码。函数代码的一部分如下所示。...显示了为了简洁起见,我删除了原始代码的部分。注意对gelman.preplot的调用,该函数的输出存储在y中。还请注意,y在结尾处以不可见的方式返回。y是一个列表,它包含了我们需要的数据,以便在ggplot中创建一个gelman.plot

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gelman.plot = function (x, bin.width = 10, max.bins = 50, confidence = 0.95, 
          transform = FALSE, autoburnin = TRUE, auto.layout = TRUE, 
          ask, col = 1:2, lty = 1:2, xlab = "last iteration in chain", 
          ylab = "shrink factor", type = "l", ...) 
{ 
  ...
  y <- gelman.preplot(x, bin.width = bin.width, max.bins = max.bins, 
                      confidence = confidence, transform = transform, autoburnin = autoburnin)
...
  return(invisible(y))
}

因此,让我们获取gelman.plot无形返回的数据,并将其存储在一个对象中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gp.dat = gelman.plot(combinedchains)

现在是ggplot版本。首先,gp.dat是一个列表,我们需要将该列表中的各个部分转换为ggplot可以使用的单个数据框架。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(dplyr)
library(reshape2)

df = data.frame(bind_rows(as.data.frame(gp.dat[["shrink"]][,,1]), 
                          as.data.frame(gp.dat[["shrink"]][,,2])), 
                q=rep(dimnames(gp.dat[["shrink"]])[[3]], each=nrow(gp.dat[["shrink"]][,,1])),
                last.iter=rep(gp.dat[["last.iter"]], length(gp.dat)))

对于图中的内容,我们将df分解为长格式,这样我们就可以将每个链放在一个单独的方面中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(melt(df, c("q","last.iter"), value.name="shrink_factor"), 
       aes(last.iter, shrink_factor, colour=q, linetype=q)) + 
  geom_hline(yintercept=1, colour="grey30", lwd=0.2) +
  geom_line() +
  facet_wrap(~variable, labeller= labeller(.cols=function(x) gsub("V", "Chain ", x))) +
  labs(x="Last Iteration in Chain", y="Shrink Factor",
       colour="Quantile", linetype="Quantile") +
  scale_linetype_manual(values=c(2,1))

创建combinedchains 这里):对象(从这里):复制的代码)的MCMC示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
trueA = 5
trueB = 0
trueSd = 10
sampleSize = 31

x = (-(sampleSize-1)/2):((sampleSize-1)/2)
y =  trueA * x + trueB + rnorm(n=sampleSize,mean=0,sd=trueSd)

likelihood = function(param){
  a = param[1]
  b = param[2]
  sd = param[3]

  pred = a*x + b
  singlelikelihoods = dnorm(y, mean = pred, sd = sd, log = T)
  sumll = sum(singlelikelihoods)
  return(sumll)
}

prior = function(param){
  a = param[1]
  b = param[2]
  sd = param[3]
  aprior = dunif(a, min=0, max=10, log = T)
  bprior = dnorm(b, sd = 5, log = T)
  sdprior = dunif(sd, min=0, max=30, log = T)
  return(aprior+bprior+sdprior)
}

proposalfunction = function(param){
  return(rnorm(3,mean = param, sd= c(0.1,0.5,0.3)))
}

run_metropolis_MCMC = function(startvalue, iterations) {
  chain = array(dim = c(iterations+1,3))
  chain[1,] = startvalue
  for (i in 1:iterations) {
    proposal = proposalfunction(chain[i,])

    probab = exp(likelihood(proposal) + prior(proposal) - likelihood(chain[i,]) - prior(chain[i,]))

    if (runif(1)  <  probab){
      chain[i+1,] = proposal
    }else{
      chain[i+1,] = chain[i,]
    }
  }
  return(mcmc(chain))
}

startvalue = c(4,2,8)
chain = run_metropolis_MCMC(startvalue, 10000)

chain2 = run_metropolis_MCMC(startvalue, 10000)
combinedchains = mcmc.list(chain, chain2)

更新: gelman.preplot是一个用户无法直接看到的内部coda函数。若要获取函数代码,请在控制台中键入getAnywhere(gelman.preplot)。然后,您可以看到该函数正在做什么,并且,如果您愿意,可以构造自己的函数,以更适合于ggplot的形式返回适当的诊断数据。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41657817

复制
相关文章
网状Meta分析之R语言‘gemtc’包实战(2)
昨天和大家分享了使用‘gemtc’这个R包去读取和汇总网状meta分析数据的方法。今天主要想和大家介绍一下如何在这个包里使用固定效应模型(fixed effect model, FEM)去计算网状meta分析的结果。在这之前,我们需要简单认识并区分固定效应模型和随机效应模型。
生信与临床
2020/08/06
3.2K0
网状Meta分析之R语言‘gemtc’包实战(2)
网状Meta分析之R语言‘gemtc’包实战(3)
这次和大家分享的还是基于R包‘gemtc‘的网状Meta分析,之前已经讲解过如何导入数据以及使用固定效应模型去分析。这一次主要内容是使用随机效应模型去进行网状Meta分析,同时包括一致性检验和概率排序的结果。
生信与临床
2020/08/06
2.7K1
网状Meta分析之R语言‘gemtc’包实战(3)
R语言近似贝叶斯计算MCMC(ABC-MCMC)轨迹图和边缘图可视化|附代码数据
近似贝叶斯计算和近似技术基于随机模拟模型中的样本计算近似似然值,在过去几年中引起了很多关注,因为它们有望为任何随机过程提供通用统计技术
拓端
2023/06/28
2220
优Tech分享 | RM -R:等价去除模型中的残差连接
ResNet是由一个个残差块堆叠而成的,每个残差块的数学表达式为:y=f(x)+x,其中f(x)叫残差,x叫残差连接(residual connection),或者直连通道(shortcut connection)。ResNet相较于VGG更受欢迎的一个关键原因,在于其使用的残差连接,能够将输入特征保留下来,在训练时只需要学习输出特征与输入特征的差值f(x),即残差。
优图实验室
2022/03/09
1.1K0
MCMC采样_MCMC认证
    在MCMC(三)MCMC采样和M-H采样中,我们讲到了M-H采样已经可以很好的解决蒙特卡罗方法需要的任意概率分布的样本集的问题。但是M-H采样有两个缺点:一是需要计算接受率,在高维时计算量大。并且由于接受率的原因导致算法收敛时间变长。二是有些高维数据,特征的条件概率分布好求,但是特征的联合分布不好求。因此需要一个好的方法来改进M-H采样,这就是我们下面讲到的Gibbs采样。
全栈程序员站长
2022/09/20
2820
MCMC采样_MCMC认证
R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样
作为第一步,我们创建一些测试数据,用于拟合我们的模型。让我们假设预测变量和响应变量之间存在线性关系,因此我们采用线性模型并添加一些噪声。
拓端
2020/11/30
1.5K0
R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样
R可视乎|回归诊断
回归应该算得上统计分析中最常用的建模手段,要判断最终得到的模型是否准确,还需要进行关键的一步——回归诊断。用过 R 语言进行回归分析的小伙伴应该知道,base 包里的 plot()函数可以直接绘制诊断结果,今天小编介绍一个更方便的工具:Lindia包[1],使用这个包可以获得更详细的回归诊断结果,语法也非常简单,下面跟着小编一起学习吧~
庄闪闪
2021/12/22
1.4K0
R可视乎|回归诊断
R中优雅的绘制物种冲积图
购买后微信发小编订单截图即邀请进新的会员交流群,小编的文档为按年售卖,只包含当年度的除系列课程外的文档,有需要往年文档的朋友也可下单购买,需要了解更多信息的朋友欢迎交流咨询。
R语言数据分析指南
2023/06/12
7780
R中优雅的绘制物种冲积图
R中优雅的绘制物种冲积图
R语言数据分析指南
2023/08/18
2830
R中优雅的绘制物种冲积图
R中优雅的绘制环状sina图
❝在R中创建sina图使用geom_sina函数,sina图是一种用于显示单个分类变量的每个观测值的图形。它与箱线图和小提琴图类似,但是它显示了每个单独的数据点,这可以提供关于数据分布的更多信息。 ❞
R语言数据分析指南
2023/09/27
3530
R中优雅的绘制环状sina图
R中轻松绘制南丁格尔图
R语言数据分析指南
2023/09/29
3090
R中轻松绘制南丁格尔图
R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断|附代码数据
尽管Stan提供了使用其编程语言的文档和带有例子的用户指南,但对于初学者来说,这可能是很难理解的。
拓端
2023/02/14
2.1K0
R语言coda贝叶斯MCMC Metropolis-Hastings采样链分析和收敛诊断可视化|附代码数据
最近我们被客户要求撰写关于MCMC Metropolis-Hastings采样的研究报告,包括一些图形和统计输出。
拓端
2023/09/06
3960
【R语言】复现paper中的韦恩图
韦恩图(venn)又称文氏图,是科研文章中最常见的图,可以用来表示多个数据集之间的关系。当然也可以进行集合运算。一般用于展示2-5个集合之间的交并集关系。集合数目更多时,将会比较难分辨,更多集合的展示方式一般使用upSetView。绘制韦恩图的工具有很多,这里小编先给没有任何编程基础的人推荐几款比较好用的网络工具。
生信交流平台
2022/09/21
8440
【R语言】复现paper中的韦恩图
R中实现面积图 (Area plot)
面积图是一种基于折线图的图形,可以通过图中的面积来表示数据的大小情况,比如下面两种都是面积图:
生信编程日常
2020/05/26
1.3K0
R语言中的Stan概率编程MCMC采样的贝叶斯模型
概率编程使我们能够实现统计模型,而不必担心技术细节。这对于基于MCMC采样的贝叶斯模型特别有用(点击文末“阅读原文”获取完整代码数据)。
拓端
2023/08/31
2790
R语言中的Stan概率编程MCMC采样的贝叶斯模型
R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样|附代码数据
第一步,我们创建一些测试数据,用来拟合我们的模型。我们假设预测变量和因变量之间存在线性关系,所以我们用线性模型并添加一些噪音。
拓端
2023/08/15
3050
诊断Java中的内存泄露
如果你看到内存上升很快,可能是因为虚拟机设置。如果你没有明确指定JVM的内存设置,它将设置默认值给他们。要获得默认值,使用以下命令:
哲洛不闹
2018/09/19
6430
诊断Java中的内存泄露
R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样|附代码数据
在许多情况下,我们没有足够的计算能力评估空间中所有n维像素的后验概率 。在这些情况下,我们倾向于利用称为Markov-Chain Monte Carlo 算法的程序 。此方法使用参数空间中的随机跳跃来(最终)确定后验分布(点击文末“阅读原文”获取完整代码数据)。
拓端
2022/10/28
1.6K0
.NET 中的工具和诊断
在本文中,您将了解 .NET 开发人员可用的各种工具。使用 .NET,您将拥有一个强大的软件开发工具包 (SDK),其中包括一个命令行界面 (CLI)。.NET CLI 支持 .NET 就绪集成开发环境 (IDE) 中的许多功能。本文还提供了生产力功能的资源,例如用于诊断性能问题、内存泄漏、高 CPU、死锁和代码分析工具支持的 .NET CLI 工具。 .NET SDK .NET SDK 包括 .NET 运行时和 .NET CLI。您可以下载适用于 Windows、Linux、macOS 或 Docker的.NET SDK。有关详细信息,请参阅.NET SDK 概述。 .NET 命令行界面 .NET CLI 是一个跨平台的工具链,用于开发、构建、运行和发布 .NET 应用程序。.NET CLI 包含在 .NET SDK 中。有关详细信息,请参阅.NET CLI 概述。 集成开发环境 您可以在Visual Studio Code、Visual Studio或Visual Studio for Mac 中编写 .NET 应用程序。 附加工具 除了比较常用的工具,.NET 还提供了针对特定场景的工具。一些用例包括卸载 .NET SDK 或 .NET 运行时、检索 Windows Communication Foundation (WCF) 元数据、生成代理源代码和序列化 XML。有关详细信息,请参阅.NET 附加工具概述。 诊断和仪表 作为 .NET 开发人员,您可以使用常见的性能诊断工具来监控应用性能、使用跟踪分析应用、收集性能指标以及分析转储文件。您使用事件计数器收集性能指标,并使用分析工具深入了解应用程序的性能。有关详细信息,请参阅.NET 诊断工具。 代码分析 .NET 编译器平台 (Roslyn) 分析器检查您的 C# 或 Visual Basic 代码是否存在代码质量和代码样式问题。有关详细信息,请参阅.NET 源代码分析概述。 包装验证 .NET SDK 允许库开发人员验证他们的包是否一致且格式良好。有关详细信息,请参阅.NET SDK 包验证。
呆呆
2022/01/04
6260

相似问题

R:彩色编码模型诊断图

14

类似R的Python线性回归诊断图

14

Python中R的in图的等价性

22

如何将MCMC诊断转换为Latex表?

20

在R中向诊断图添加标签

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文