绘制分布的尾部

时间:2018-05-02 14:43:54

标签: r ggplot2 distribution probability-density

我有两个数据集var1和var2。我想比较两个发行版。

libary(ggplot2)
library(reshape)


set.seed(101)
var1 = rnorm(1000, 0.5)
var2 = rnorm(100000,0.5)
combine = melt(data.frame("var1" = var1,"var2"= var2))
ggplot(data = combine) + geom_density(aes(x = value, color = variable), alpha = 0.2)

enter image description here

这导致分布的密度图看起来非常相似(除了中间部分的几个蠕动),但是,我想显示分布的尾部不相同。变量2的扩散比一个大。除了传播/分位数之外,哪些统计数据可以进行比较以显示差异?

是否有人知道任何技术,统计测试或可视化技术,尤其是为了显示分布尾部的差异(更高的尾部,更高的极端)。

1 个答案:

答案 0 :(得分:2)

您可以通过绘制每个样本的分位数来显示尾部实际上是不同的(参见下面的示例)。

在测试样本是否来自正态分布方面,您可以使用Anderson-Darling测试来测试偏离正常性:

library(goftest)

ad.test(var1, "pnorm", mean=0.5)
ad.test(var2, "pnorm", mean=0.5)

您还可以使用Anscombe测试来测试峰度的差异(分布达到峰值),以确定尾部是否在统计上有显着差异:

library(moments)

anscombe.test(var1)
anscombe.test(var2)

这些测试都没有提出统计学上的显着偏离,这是有道理的,因为两个样本都相对较大,实际上它们来自同一分布。

您可能会发现这些链接对于测试分发尾部的差异非常有用:herehere

在可视化分布方面,绘制分位数可能会更容易辨别出尾部的差异:

library(ggpubr)

prob = seq(0,1,0.0001)
dat = combine %>% group_by(variable) %>% 
  summarise(value = list(quantile(value, probs=prob)),
            Percentile = list(prob*100))

p = dat %>% unnest %>% 
  ggplot(aes(Percentile, value, colour=variable)) + 
  geom_line() +
  theme_bw()

ggarrange(p + scale_x_continuous(limits=c(0,10), breaks=0:100),
          p + scale_x_continuous(limits=c(90,100), breaks=0:100), 
          ncol=2, common.legend=TRUE)

enter image description here

经验累积密度分布是另一种选择:

ggplot(combine, aes(value, colour=variable)) + 
  stat_ecdf() +
  theme_bw()

enter image description here