【问题标题】:geom_density() grouped plot with discrete x axis is not smooth具有离散 x 轴的 geom_density() 分组图不平滑
【发布时间】:2018-06-06 17:07:10
【问题描述】:

我正在处理一个数据集,该数据集由两组不同的观察值组成,其中值是整数。我想绘制它们的密度,以了解不同组在值上的分布情况。

发生的情况是一组具有“平滑”密度,而另一组具有“波浪”密度。我知道这与带宽有关,而且我的数据基本上与离散观察相关,但如果有人能准确解释原因,我会很高兴。

这是一个例子:

data2 <- rbind(
    data.frame(group=rep('poisson1', 1000), value = rpois(1000, 5)),
    data.frame(group=rep('poisson2', 1000), value = rpois(1000, 45)))

library(ggplot2)
ggplot(data2, aes(x=value, fill=group)) +
  geom_density()

奇怪的是,我可以再次创建该数据框以获取新样本,并且情节有时很流畅:

【问题讨论】:

  • 查看geom_density 的文档。有许多参数会传递给底层的 density 函数,包括内核类型和带宽
  • 是的,我确实阅读了 geom_density 的文档,这让我看到了 stats::density,我确信这与 x 值是离散的和选择的带宽有关。但是我仍然不完全清楚为什么,特别是当我可以从 rpois 的 lambda = 5 的 1000 个单个样本的绘图中看到相同的东西时。大多数时候密度图是平滑的,但每一次有一段时间不是。我希望有人能以我能理解的方式解释原因。

标签: r ggplot2 kernel-density density-plot


【解决方案1】:

观察到的平滑度(或缺乏平滑度)是由rpois() 函数“引起”的。 rpois() 函数中的 lambda 参数必须是所需随机分布的非负均值。因此,当您传递更接近于零 (rpois(1000, 5)) 的 lambda 时,它将生成较少的唯一值(因为它以零为界)。

考虑这个例子:

nValue <- 1e3
nLambda <- c(1:9, seq(10, 100, 10))

foo <- lapply(nLambda, function(lambda) {
    data.frame(value = rpois(nValue, lambda), lambda)
})
data <- do.call(rbind, foo)
ggplot(data, aes(value, group = lambda, color = lambda)) +
    geom_density()

我们可以看到lambda 接近于零会有峰值,而远离零会产生更平滑的线条。

您还可以通过查看每个 lambda 组中的差异来测试这一点:

ggplot(aggregate(data$value, list(data$lambda), var), aes(Group.1, x)) +
    geom_line() +
    geom_point() +
    labs(x = "Lambda",
         y = "Variance")

【讨论】:

  • 这有点道理,但我可以从一个 lambda = 5 的单个 rpois 中多次绘制 1000 次绘制的样本,并且大多数时候密度图是平滑的。每隔一段时间,我就会看到一个“波浪状的”。我想这只是让我感到惊讶。
  • @JasonAment 这只是一个概率:如果您对 5 个均值为 5 的数字进行抽样,那么您可以得到3,4,5,6,7(平滑)或5,5,5,5,5(一个峰值)。
  • 我知道样本中会有变化,但我仍然感到惊讶的是,从 n = 1000 的 rpois 反复采样并绘制该样本的密度通常会产生“平滑”,但总是略微不同的密度图,但每隔一段时间就会产生一个“波浪状”的图。除了简单的采样可变性之外,带宽的选择方式以及 x 值是离散的这一事实是否可以解释这一点?
  • 我怀疑它与带宽有关,如果您查看 R 中的原始值,您应该观察到某种低唯一性模式
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2021-11-01
  • 2010-12-22
  • 2014-08-04
  • 1970-01-01
相关资源
最近更新 更多