【问题标题】:Plot probability with ggplot2 (not density)用 ggplot2 绘制概率(不是密度)
【发布时间】:2011-02-17 18:52:35
【问题描述】:

我想绘制数据,这样在 y 轴上会有概率(在 [0,1] 范围内),在 x 轴上我有数据值。数据是连续的(也在 [0,1] 范围内),因此我想使用一些核密度估计函数并将其归一化,以便某个点 x 的 y 值表示在输入中看到值 x 的概率数据。

所以,我想问一下:

a) 这是否合理?我知道我不可能看到数据中没有的值,但我只想使用核密度估计函数在我拥有的点之间进行插值,然后对其进行归一化。

b) 我可以使用 ggplot 中的任何内置选项,例如这样做会覆盖 geom_density() 的默认行为吗?

提前致谢,

提莫

编辑: 当我之前说“标准化”时,我实际上是指“规模”。但我得到了答案,所以感谢大家澄清我的想法。

【问题讨论】:

  • 我不确定你所说的绘制概率但“不是密度”是什么意思,但你提到想要对数据进行内核平滑。内核所做的是将经验分布(即直方图)转换为平滑的密度函数(即 PDF)。我认为您必须放弃内核平滑要求或不绘制密度的愿望。尽管当您说“之后对其进行规范化”时,您可能正在解决这个问题。
  • 谢谢你让我清醒。我认为在这种情况下只使用直方图更合适。如果我试图用平滑来绘制概率,我想我会混淆任何试图解释这些图的人。

标签: r ggplot2


【解决方案1】:

只是快速合并@JD Long 和@yesterday 的答案:

ggplot(df, aes(x=x)) +
  geom_histogram(aes(y = ..density..), binwidth=density(df$x)$bw) +
  geom_density(fill="red", alpha = 0.2) +
  theme_bw() +
  xlab('') +
  ylab('')

这样ggplot2 的binwidth 是由density 函数计算的,并且后者也被绘制在具有良好透明度的直方图的顶部。但是您绝对应该按照@yesterday 的建议查看stat_densitiy 以进行进一步定制。

【讨论】:

    【解决方案2】:

    这不是一个 ggplot 答案,但如果您想将内核平滑和直方图的想法结合在一起,您可以采用引导 + 平滑方法。你会因为做这样丑陋的事情而被统计人员打得头晕目眩,所以使用风险自负;)

    从一些合成数据开始:

    set.seed(1)
    randomData <- c(rnorm(100, 5, 3), rnorm(100, 20, 3) )
    hist(randomData, freq=FALSE)
    lines(density(randomData), col="red")
    

    密度函数有一个相当智能的带宽计算器,您可以从中借用:

    bw <- density(randomData)$bw
    resample <- sample( randomData, 10000, replace=TRUE)
    

    然后使用带宽计算作为 SD 来制造一些随机噪声

    noise <- rnorm(10000, 0, bw)
    hist(resample + noise, freq=FALSE)
    lines(density(randomData), col="red")
    

    嘿看!内核平滑直方图!

    我知道这个冗长的回复并不能真正回答您的问题,但也许它会就如何滥用您的数据提供一些创造性的想法。

    【讨论】:

    • 太棒了!这是你用来实现这一目标的一个非常巧妙的技巧!感谢您花时间和精力分享它。明天我当然会更深入地尝试一下。与此同时,我谨请注意不要被统计人员严重殴打:)
    【解决方案3】:

    您可以通过调用 stat_density() 而不是 geom_density() 来控制 ggplot 中密度/内核估计的行为。

    查看在线用户手册:http://had.co.nz/ggplot2/stat_density.html 您可以指定 stats::density() 支持的任何核估计函数

    library(ggplot2)
    df <- data.frame(x = rnorm(1000))
    ggplot(df, aes(x=x)) + stat_density(kernel="biweight")
    

    【讨论】:

    • 谢谢,虽然我的主要问题是如何缩放 ..density.. 这样之后它将对应于位置 x 的值发生的概率。但正如@JD Long 上面评论的那样,这种方法在大多数情况下没有多大意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2011-04-23
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多