R - cut2与分位数函数

时间:2016-06-02 16:05:23

标签: r quantile hmisc quartile

有人可以告诉我R中的分位数功能和HMISC包中的cut2功能之间的区别吗?

据我所知,分位数有9种不同的方法来指定四分位数。但是,当我使用函数cut2(mydata,g = 4)时,输出的四分位数不对应于任何分位数函数输出。

非常感谢任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:6)

来自cut2帮助文件:

  

像剪切一样的功能,但左端点是包含的,标签是   形式[下,上],除了最后一个区间是[下,上]。   如果给出剪切,默认情况下将确保剪切包括整个剪切   范围x。

因此,cut2基本上是cut,有几个不同的默认值。让我们看一下cut

来自cut帮助文件:

  

cut将x的范围划分为间隔,并对x中的值进行编码   根据他们下降的间隔。最左边的间隔   对应于第一级,下一个最左边到第二级,依此类推。

来自quantile帮助文件:

  

通用函数分位数产生对应的样本分位数   给定的概率。最小的观察对应于a   概率为0,最大概率为1。

一个削减x的范围,另一个削减"频率" x

插图:

out <- 0:100
out2 <- c(seq(0, 50, 0.001), 51:100)

两者都有相同的范围。从0到100.

levels(cut(out,4, include.lowest = T))
[1] "[-0.1,25]" "(25,50]"   "(50,75]"   "(75,100]" 
levels(cut(out2,4, include.lowest = T))
[1] "[-0.1,25]" "(25,50]"   "(50,75]"   "(75,100]" 

但还有更多&#34;数据点&#34;居住在out2,特别是0到50之间的值。因此,他们在该范围内的频率不同:

quantile(out)
  0%  25%  50%  75% 100% 
   0   25   50   75  100 
quantile(out2)
      0%      25%      50%      75%     100% 
  0.0000  12.5125  25.0250  37.5375 100.0000 

这是cutquantile之间的区别。

上面的例子也告诉你两者是否一致,即在均匀分布的情况下。例如,从0到100的顺序均匀分布在0到100的范围内。这里两者基本相同。

为了进一步说明,请考虑:

outdf <- data.frame(out=out, cut=cut(out,4, include.lowest = T))
out2df <- data.frame(out=out2, cut=cut(out2,4, include.lowest = T))

table(outdf$cut)
[-0.1,25]   (25,50]   (50,75]  (75,100] 
       26        25        25        25 
table(out2df$cut)
[-0.1,25]   (25,50]   (50,75]  (75,100] 
    25001     25000        25        25 

在这里,您可以清楚地看到每个箱子中的不同频率。