背景
某些概率分布,如商分布(又名ratio distributions),其中一个特定的情况是Cauchy distribution,似乎很难可视化,因为它们的尾部很重。下面是ggplot2
中的MRE:
require(ggplot2)
a <- rnorm(1e4, 2, 0.5)
b <- rnorm(1e4, 0.2, 0.1)
c <- a/b
ggplot() + geom_density(aes(c)) + coord_cartesian(xlim = c(-300, 500))
提问
我试着根据this S/O post的答案调整内核带宽,但似乎不起作用。我如何获得上述概率分布的平滑版本?当我尝试处理依赖关系时,例如ggridges::geom_density_ridges
,显然会出现同样的问题。
1条答案
按热度按时间w3nuxt5m1#
问题是ggplot 2默认情况下会在x轴上创建512个点来计算内核密度。由于您的范围是数据范围的一小部分,因此只会显示其中一些被计算的点。我们可以通过添加一个点层来演示这一点:
值得注意的是,密度层并不知道坐标的限制。解决这个问题的一个方法是增加
n
参数的点数。然而,这可能会效率低下,因为你没有使用所有这些点。相反,你可以设置比例的限制,密度层 * 会 * 知道。这将使你看到的范围更密集地填充点,从而提供更平滑的KDE。
这里有一个重要的细节,我们使用
oob = scales::oob_keep
作为越界处理器。这确保KDE计算考虑所有的点,而不仅仅是你的范围内的点。创建于2023-04-24带有reprex v2.0.2