1

谁能告诉我 R 中的分位数函数和 HMISC 包中的 cut2 函数之间的区别?

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

非常感谢任何帮助。

提前致谢。

4

1 回答 1

9

cut2帮助文件:

函数类似于 cut 但左端点包含在内,标签的形式为 [lower, upper),除了最后一个区间是 [lower,upper]。如果给出切割,默认情况下会确保切割包括 x 的整个范围。

所以,cut2基本上cut是有几个不同的默认值。那我们来看看cut

cut帮助文件:

cut 将 x 的范围划分为多个区间,并根据它们落在哪个区间对 x 中的值进行编码。最左边的区间对应于第一级,下一个最左边对应于第二级,依此类推。

quantile帮助文件:

通用函数 quantile 产生对应于给定概率的样本分位数。最小的观测值对应概率为 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]" 

但是还有更多的“数据点”存在于 中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 

cut这就是和之间的区别quantile

上面的示例还向您展示了双方同意的情况,即在均匀分布的情况下。比如从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 

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

于 2016-06-02T16:19:58.753 回答