将两个直方图放在同一比例上的最佳方法?

机器算法验证 数据可视化 直方图 密度函数 分箱
2022-02-28 22:01:51

假设我有两个我想详细比较的分布,即以一种使形状、比例和移位容易可见的方式。做到这一点的一个好方法是为每个分布绘制一个直方图,将它们放在相同的 X 尺度上,然后将一个堆叠在另一个下方。

这样做时,应该如何进行分箱?即使一个分布比另一个分布更分散,两个直方图是否应该使用相同的 bin 边界,如下图 1 所示?是否应该在缩放之前为每个直方图独立完成分箱,如下图 2 所示?在这方面甚至有一个好的经验法则吗?

图 1 图 2

3个回答

我认为您需要使用相同的垃圾箱。否则,头脑会欺骗你。Normal(0,2) 在 Image #2 中相对于 Normal(0,1) 看起来比在 Image #1 中更分散。与统计无关。看起来 Normal(0,1) 进行了“节食”。

——拉尔夫·温特斯

中点和直方图端点也可以改变对分散的感知。请注意,在此小程序中,最大 bin 选择意味着 >1.5 - ~5 的范围,而最小 bin 选择意味着 <1 - > 5.5 的范围

http://www.stat.sc.edu/~west/javahtml/Histogram.html

另一种方法是在同一个图上绘制不同的分布,并使用alpha参数 inggplot2来解决过度绘图问题。此方法的实用性将取决于您的分布中的差异或相似性,因为它们将使用相同的 bin 绘制。另一种选择是显示每个分布的平滑密度曲线。以下是这些选项和线程中讨论的其他选项的示例:

library(ggplot2)

df <- melt(
    data.frame( 
        x = rnorm(1000)
        , y = rnorm(1000, 0, 2)
    )
)


ggplot(data = df) + 
#   geom_bar(aes(x = value, fill = variable), alpha = 1/2)
#   geom_bar(aes(x = value)) + facet_grid(variable ~ .)
#   geom_density(aes(x = value, colour = variable))
#   stat_qq(aes(sample = value, colour = variable))

所以这是保持相同的 bin 大小还是保持相同的 bin 数量的问题?我可以看到双方的争论。一种解决方法是首先标准化这些值。然后你可以同时维护两者。