在 R 中使用 ggplot 绘制均匀分布

Drawing uniform Distributions with ggplot in R

我想在 R 中绘制不同的均匀分布,最好使用 ggplot。当尝试绘制 U(0.35,0.55) 的 pdf 时,看起来边缘周围有一些值(即参数值,在本例中为 0.35 和 0.55),其概率与应有的不同。输出可以在这里看到:

这在作为均匀分布输入的不同参数之间是一致的,似乎不是规模问题。

重现类似结果的代码示例:

#parameters
alpha_1 <- 0.35
beta_1 <- 0.55
alpha_2 <- 0.5
beta_2 <- 0.7
alpha_3 <- 0.1
beta_3 <- 0.3

base <- ggplot() + xlim(-1, 2)


base + 
        geom_function(aes(colour = "state 1"), fun = dunif, args = list(alpha_1, beta_1)) +
        geom_function(aes(colour = "state 2"), fun = dunif, args = list(alpha_2, beta_2)) +
        geom_function(aes(colour = "state 3"), fun = dunif, args = list(alpha_3, beta_3))

使用 stat_function 而不是 geom_function 不会改变任何东西。

但是,下面的工作:

curve(dunif(x, min = alpha_1, max = beta_1), 
            from = 0, to = 1, 
            n = 100000, 
            col = "blue", 
            lwd = 2, 
            add = F, 
            yaxt = "n",
            ylab = 'probability')
curve(dunif(x, min = alpha_2, max = beta_2), 
     from = 0, to = 1, 
     n = 100000, 
     col = "red", 
     lwd = 2, 
     add = T, 
     yaxt = "n",
     ylab = 'probability')
curve(dunif(x, min = alpha_3, max = beta_3), 
     from = 0, to = 1, 
     n = 100000, 
     col = "black", 
     lwd = 2, 
     add = T, 
     yaxt = "n",
     ylab = 'probability')

我怎样才能让它在 ggplot 中工作?在我看来问题可能是这样的:

计算 x 轴上的 n 个值以获得图表的坐标。围绕参数 (a,b) 这些是,例如在 a+0.0001 和 a-0.0001。这些坐标之间的直线不会完全垂直。我不确定这是否是正确的诊断,但无论如何,我将不胜感激。谢谢!

这很容易通过增加评估点数来解决,正如 Gregor Thomas 在评论中指出的那样。以下调整后的代码按预期工作:

library(ggplot2)
#parameters
alpha_1 <- 0.35
beta_1 <- 0.55
alpha_2 <- 0.5
beta_2 <- 0.7
alpha_3 <- 0.1
beta_3 <- 0.3

base <- ggplot() + xlim(-1, 2)


base + 
        stat_function(aes(colour = "state 1"), fun = dunif, args = list(alpha_1, beta_1), n = 10001) +
        stat_function(aes(colour = "state 2"), fun = dunif, args = list(alpha_2, beta_2), n = 10001) +
        stat_function(aes(colour = "state 3"), fun = dunif, args = list(alpha_3, beta_3), n = 10001)

关键的变化是在每个 stat_function 调用中添加 n=10001