2016-02-08 5 views
1

В настоящее время я делаю некоторые манипуляции данными и искал способ создания децилей с равным количеством наблюдений в каждой группе. Я столкнулся с пакетом Hmisc и функцией cut2 и находился под впечатлением, что он должен разделить данные на 10 ведер с равным количеством наблюдений в каждом, указав g = 10. Однако выход этой функции был совсем немного выключен. Я неправильно использую cut2?cut2 разбивается на неравные ведра

код я использую:

library(Hmisc) 
testdata <- data.frame(rating= c(8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 6, 8, 8, 8, 8, 6, 8, 6, 8, 4, 8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 8, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 6, 8, 8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 6, 8, 8, 6, 4, 8, 8, 8, 8, 8, 6, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 8, 6, 8, 8, 8, 6, 8, 8, 6, 6, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 6, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 6, 8, 8, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 8, 8, 6, 8, 8, 8, 6) 
,age=c(0, 0, 0, 0, 3, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 34, 34, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 48, 48, 48, 54, 54, 54, 56, 56, 58, 59, 59, 59, 59, 60, 60, 60, 61, 66, 66, 70, 72)) 
cutcutcut <- cut2(testdata$age,g=10) 
testtable <- table(cutcutcut) 

и выход неравных наблюдений в каждом ведре

testtable 

[ 0,13) [13,15) [15,20) [20,24) [24,26) [26,28) [28,33) [33,40) [40,46) [46,72] 
46  16  35  28  33  35  26  31  31  28 

ответ

0

Ответ на ваш вопрос находится в поиске на распределение ваших данных:

table(testdata$age) 
# 0 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
# 4 1 4 6 4 3 4 2 2 16 9 7 5 10 6 7 7 13 4 2 9 
# 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 
# 23 10 18 17 8 5 3 2 8 2 2 5 9 5 5 3 2 8 7 3 6 
# 45 46 47 48 54 56 58 59 60 61 66 70 72 
# 5 4 3 3 3 2 1 4 3 1 2 1 1 

Мы видим, что некоторые возрасты имеют большое количество людей в этом возрасте (например, существует 16 человек с возрастом 12 и 23 человека в возрасте 24 лет). Поскольку алгоритм резания должен помещать всех людей с одинаковым возрастом в одно и то же ведро, это может привести к некоторым дисбалансам в ведрах.

Поскольку в ваших данных имеется 309 полных наблюдений, и вы ищете 10 ведер, вам идеально хотелось бы 31 наблюдение в 9 ведрах и 30 в последнем. Прямо сейчас последний ковш определяется как [46, 72], который содержит 28 элементов (слишком низкий). Если вы расширили его до [45, 72], он будет содержать 33 элемента (слишком много). Невозможно разделить данные, чтобы получить точно 30 или 31 наблюдений в этом последнем ковше, потому что существует 5 элементов со значением 45.