r - ggplot2 3.2.0 版和bayesAB 绘图冲突
问题描述
bayesAB
这是使用该包的两组之间的简单贝叶斯比较:
library(bayesAB)
A_binom <- rbinom(100, 1, .5)
B_binom <- rbinom(100, 1, .6)
AB1 <- bayesTest(A_binom, B_binom,
priors = c('alpha' = 1, 'beta' = 1),
distribution = 'bernoulli')
plot(AB1)
并使用ggplot2
(3.1.1) 的先前版本,用于返回预期图的过程,如此处所述和所示:https ://frankportman.github.io/bayesAB/reference/bayesTest.html 。
但是,更新到ggplot2
(3.2.0) 后,运行后出现以下错误plot(AB1)
:
错误:必须给出 ymin 或 ymax 作为美学。
在检查了更多使用p = plot(AB1)
以分别关注每个情节之后,我看到了这一点p$posteriors
并按
p$samples
预期工作,问题与p$priors
. 同一个包 ( ) 中的plotBeta(6,4)
, 等命令也存在类似问题。plotGamma(1,1)
bayesAB
有没有办法使用ggplot2
3.2.0 解决这个问题?
解决方案
此错误是由于代码更改所致(请参阅3.2.0 的 CRAN 新闻文件geom_ribbon
的“重大更改”部分)。
ggplot2 团队已经通过bayesAB 的 GH 问题页面提醒了包作者,因此希望该包可以很快更新以解决这个问题。
plotDist_
在此之前,一种快速的解决方法是在未导出的函数中修改底层有问题的代码,方法是在trace(bayesAB:::plotDist_, edit=TRUE)
R 会话开始时运行,并修改以下代码行。
原来的:
function (support, hseq, dist, params)
{
discretes <- c("Poisson")
ribbon_or_bar <- ggplot2::geom_ribbon(ymin = 0,
ymax = hseq, # <- modify this line
size = 2, color = I("lightblue"), fill = "lightgreen",
alpha = 0.25)
# ... omitted
}
修改的:
function (support, hseq, dist, params)
{
discretes <- c("Poisson")
ribbon_or_bar <- ggplot2::geom_ribbon(ymin = 0,
mapping = ggplot2::aes(ymax = hseq), # new version, with ymax placed inside aes()
size = 2, color = I("lightblue"), fill = "lightgreen",
alpha = 0.25)
# ... omitted
}
plot(AB1)
更改后应该像以前一样工作。下面是对应的图p$priors
:
plotBeta(6,4)
:
plotGamma(1,1)
:
推荐阅读
- python - 是否可以将 QInputDialog 与嵌套列表或类似的东西一起使用?
- python - 将 AWS Secrets Manager 与 Python 结合使用(Lambda 控制台)
- sql-server - 使用 Azure DevOps 部署数据库期间出现错误“DELETE 语句与 REFERENCE 约束冲突”
- java - 从另一个方法中更新 JFrame
- c - 从动态分配的文件中计算最重复出现的元音
- datetime - PySpark to_date() 方法是否只是将日期时间截断为日期?
- vb.net - 按列或单元格添加到 DataGridView
- sql - 选择前两个不同的匹配项并返回 rowid
- swift - 如何使用 Swift 5 在闭包内设置变量并在闭包外使用它
- python - 列出一级“拆包”