Использование cut2 от Hmisc для расчета разрезов для разного количества групп

Я пытался вычислить равные квантильные разрезы для вектора, используя cut2 из Hmisc.

library(Hmisc)
c <- c(-4.18304,-3.18343,-2.93237,-2.82836,-2.13478,-2.01892,-1.88773,
       -1.83124,-1.74953,-1.74858,-0.63265,-0.59626,-0.5681)

cut2(c, g=3, onlycuts=TRUE)

[1] -4.18304 -2.01892 -1.74858 -0.56810

Но я ожидал следующего результата (33%, 33%, 33%):

[1] -4.18304 -2.13478 -1.74858 -0.56810

Должен ли я по-прежнему использовать cut2 или попробовать что-то другое? Как я могу заставить его работать? Спасибо за совет.


person lucyh    schedule 02.05.2013    source источник
comment
Каков ожидаемый результат?   -  person Roman Luštrik    schedule 03.05.2013
comment
Ожидаются -4,18304, -2,13478, -1,74858, -0,56810.   -  person lucyh    schedule 03.05.2013


Ответы (2)


Вы видите точки отсечки, но вам нужны табличные подсчеты, и вы хотите, чтобы они были в виде долей от общего числа, поэтому вместо этого сделайте следующее:

> prop.table(table(cut2(c, g=3) ) )

[-4.18,-2.019) [-2.02,-1.749) [-1.75,-0.568] 
     0.3846154      0.3076923      0.3076923 

(Очевидно, вы не можете ожидать, что cut2 создаст точное разделение, когда количество элементов не делится на 3 без остатка.)

person IRTFM    schedule 03.05.2013
comment
Спасибо за ваш вклад. Я не пытаюсь получить вероятность. Но я пытался получить сокращения, близкие к равному квантилю. - person lucyh; 03.05.2013
comment
Я думал, что @lucyh охотится за квантилями. Она могла бы попробовать quantile(x, c(0, 0.33, 0.66, 0.99)). - person Roman Luštrik; 03.05.2013

Кажется, что в исходном наборе данных случайно оказалось тринадцать значений вместо двенадцати. Тринадцать значений нельзя разделить поровну на три квантильные группы (как упоминает BondedDust). Вот исходная проблема, за исключением того, что одно выбранное значение данных (-1,74953) исключено, что делает их двенадцатью значениями. Это дает первоначально ожидаемый результат:

library(Hmisc)

c<-c(-4.18304,-3.18343,-2.93237,-2.82836,-2.13478,-2.01892,-1.88773,-1.83124,-1.74858,-0.63265,-0.59626,-0.5681)

cut2(c, g=3,onlycuts=TRUE)
#[1] -4.18304 -2.13478 -1.74953 -0.5681


Чтобы сделать его более понятным для тех, кто не знаком с cut2 из пакета Hmisc (например, меня этим утром), здесь аналогичная задача, за исключением того, что мы будем использовать целые числа от 1 до 12 (назначенные вектору dozen_values).

library(Hmisc)

dozen_values <-1:12

quantile_groups <- cut2(dozen_values,g=3)

levels(quantile_groups)
## [1] "[1, 5)" "[5, 9)" "[9,12]"

cutpoints <- cut2(dozen_values, g=3, onlycuts=TRUE)

cutpoints
## [1]  1  5  9 12

# Show which values belong to which quantile group, using a data frame
quantile_DF <- data.frame(dozen_values, quantile_groups)
names(quantile_DF) <- c("value", "quantile_group")

quantile_DF
##    value quantile_group
## 1      1         [1, 5)
## 2      2         [1, 5)
## 3      3         [1, 5)
## 4      4         [1, 5)
## 5      5         [5, 9)
## 6      6         [5, 9)
## 7      7         [5, 9)
## 8      8         [5, 9)
## 9      9         [9,12]
## 10    10         [9,12]
## 11    11         [9,12]
## 12    12         [9,12]

Обратите внимание, что первая группа квантилей включает все до, но не включая, 5 (т. е. от 1 до 4, в данном случае). Вторая группа квантилей содержит от 5 до, но не включая, 9 (т.е. от 5 до 8, в данном случае). Третья (последняя) квантильная группа содержит числа от 9 до 12, которые включают последнее значение 12. В отличие от других квантилевых групп, третья квантильная группа включает последнее отображаемое значение.

В любом случае, вы можете видеть, что «точки отсечения» 1, 5, 9 и 12 наиболее лаконично описывают начальную и конечную точки групп квантилей, но без чтение соответствующей документации (ссылка на одностраничный сайт Inside-R вместо почти 400-страничного руководства в формате PDF).

См. это объяснение о скобках и квадратных скобках, если это вам незнакомо.

person Christopher Bottoms    schedule 23.10.2014