我有两个连续的、非配对的测量分布。我想用一对直方图来可视化这两个分布,计算落在 bin 区间内的测量值。
有没有办法重新调整或处理两组中较小的一组,这样当我制作他们的数据的两个直方图(或其他可视化、小提琴、盒子等)时,可视化不会导致查看者偏爱包含相对于另一组,一组测量值的代表性不足或过多。
我有两个连续的、非配对的测量分布。我想用一对直方图来可视化这两个分布,计算落在 bin 区间内的测量值。
有没有办法重新调整或处理两组中较小的一组,这样当我制作他们的数据的两个直方图(或其他可视化、小提琴、盒子等)时,可视化不会导致查看者偏爱包含相对于另一组,一组测量值的代表性不足或过多。
因为您询问了直方图,所以我假设您有兴趣比较两个分布的形状以了解它们的相似程度。这与试图可视化分布的其他方面不同,例如它们的均值是否不同。
一般来说,直方图是一种用于评估分布形状的钝器(请参阅这个出色的答案:Assessing proper distribution of data based on a histogram)。尽管在尝试比较两种分布时您会遇到相同的问题,但它们不一定会相互抵消。因此,直方图并不是这个任务的好选择。
你最好的选择是使用qq-plot。如今,qq 图被认为是一种将观察到的分布与理论分布进行比较的方法。但是,它们最初是为了比较分布而开发的。和你在这里的情况一样。插值方法通常用于匹配不同大小的数据集,因此这在很大程度上不是问题。如果分布的形状相同,则这些点将落在一条直线上。
为了探索这个建议,让我们检查一些数据。在这里,我模拟了指数分布和卡方分布的数据。两者都强烈右偏,但它们的形状不同。我将使用以下代码编写示例R
:
set.seed(7264) # this makes the example exactly reproducible
x1 = rexp(20, rate=1)
x2 = rchisq(100, df=2)
windows()
qqplot(x1, x2)
abline(0,1, col="gray")
最基本的发现是这些点不落在一条直线上。这意味着形状不同。一个后续问题是评估分布有何不同。在某种程度上,这可以通过检查情节的各个方面来确定。我在原点添加了一条 45线。需要明确的是,要点不必落在此线——它们可以落在任何一条直线上,但这条特定的参考线可以帮助我们理解它们的不同之处:因为这些点从 (0, 0) 开始,但大部分都在直线上方,我们可以看出 X2 的方差为大于 X1。我们可以看到最后一点大约是 (2.7, 10),因此最大 X2 值要远得多。因为中间值在直线上方,我们可以看出 X2 的中值大于 X1 的中值。此外,上凹曲线意味着 X2 比 X1 更偏斜。
尽管如此,人们通常很难从 qq 图中确定形状或相对形状。我通常建议人们将它们与内核密度图配对。您可以评估形状是否与 qq-plot 相似,然后从密度图中找出形状似乎是什么。
windows()
plot(density(x2), col="navyblue", ylim=c(0, max(density(x1)$y)),
xlim=c(0, max(density(x2)$x)), lwd=2, xlab="value", main="")
lines(density(x1), col="green4", lwd=2)
xs = seq(0,10,.1)
lines(x=xs, y=dexp(xs, rate=1), lty=2, lwd=2, col="chartreuse")
lines(x=xs, y=dchisq(xs, df=2), lty=2, lwd=2, col="cyan")
legend("topright", legend=c("exp kernel density",
"chi-squared kernel density",
"exp theoretical density",
"chi-squared theoretical density"),
lty=c(1,1,2,2), lwd=2, col=c("navyblue","green4","chartreuse","cyan"))
我认为这些形状在这里更容易看到。(如果您想查看它们的外观,我还包含了真正 PDF 的代码。)