这是使用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解决此问题?

最佳答案

此错误是由于geom_ribbon的代码更改(请参见CRAN news file for 3.2.0的“重大更改”部分)引起的。

ggplot2团队已经通过bayesAB's GH issues page通知了软件包作者,因此希望该软件包可以尽快更新以解决此问题。

在此之前,一种快速的解决方法是通过在R会话开始时运行plotDist_并在下面的代码行中修改未导出的trace(bayesAB:::plotDist_, edit=TRUE)函数中的潜在问题代码。

原版的:

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对应的图:

r - ggplot2版本3.2.0和bayesAB绘图冲突-LMLPHP

plotBeta(6,4)

r - ggplot2版本3.2.0和bayesAB绘图冲突-LMLPHP

plotGamma(1,1)

r - ggplot2版本3.2.0和bayesAB绘图冲突-LMLPHP

关于r - ggplot2版本3.2.0和bayesAB绘图冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56649126/

10-09 09:11