R Hist: соотношение между значением 'breaks' и количеством / размером бункеров - PullRequest
0 голосов
/ 02 мая 2018

Относительно функции HIST / hist () в R / Может кто-нибудь помочь мне найти:

очень простое определение, объясняющее связь между указанным значением 'breaks' и количеством бинов, произведенных в гистограмме?

Например, я использую базовый набор данных, предоставляемый инструментом R:

data(mtcars)
hist(mtcars$mpg, break=3) --> will draw 3 bins (really??? weird!)
hist(mtcars$mpg, break=4) --> will draw 5 bins 
hist(mtcars$mpg, break=5) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=6) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=7) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=8) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=9) --> will draw 11 bins (why???)

Почему перерывы = 4,5,6,7,8 приводят к одинаковому количеству ячеек, а перерывы = 3 приводят только к 4 ящикам, ...?

Документация R, которую вы можете найти по адресу histstist или по следующей ссылке: http://localhost//library/graphics/html/hist.html

на самом деле не помогло, и я попытался установить какую-либо связь между значением, указанным в "breaks =", размером ячейки и количеством корзин, и я не мог найти простую или простую формулу или объяснение для вычета таких " ссылка».

Я просто не понимаю, что значит "breaks = 3"? Означает ли это "3 перерыва" или это означает "перерыв каждые 3 единицы" или что-то совершенно другое?

Буду очень признателен за любую подсказку, помощь, указатели любого рода.

Спасибо.

1 Ответ

0 голосов
/ 02 мая 2018

Документация для hist гласит, что когда вы указываете разрывы как одно число (как вы сделали), тогда

номер только предложение; поскольку точки останова будут установлены на красивые значения

Если перейти по ссылке на документацию для pretty, там написано

Значения выбираются таким образом, чтобы они в 1, 2 или 5 раз превышали степень 10.

Вы не можете разделить разрыв между 10 и 35 в 4 равномерно распределенных кратных 1,2, 5 или 10, поэтому он выбрал 5 бинов (6 точек останова). Если вы действительно хотите четыре равномерно распределенных корзины, вы можете использовать

hist(mtcars$mpg, seq(10,35, length.out=5))

Histogram with 4 bins

Обратите внимание, что вам нужно использовать length.out = 5, чтобы получить четыре ячейки (четыре начальные точки плюс одна дополнительная конечная точка). Конечно, это не дает «симпатичных» значений.

Если вам не нравится, что отметки на оси x не совпадают с ячейками, (я так не делаю), вы можете опустить оси в hist и добавить их самостоятельно.

H = hist(mtcars$mpg, seq(10,35, length.out=5), axes=FALSE, ylim=c(0,14))
axis(side=1, at=seq(10,35, length.out=5))
axis(side=2, pretty(0:14))

Histogram 2

Дальнейшее объяснение breaks

В документации ?hist говорится, что в перерывах существует 5 типов значений, которые можно использовать для перерывов. Тот, который вы используете:

одно число, дающее количество ячеек для гистограммы

НО, как отмечено выше, документация добавляет:

номер только предложение; точки останова будут установлены в симпатичные значения.

Поэтому, когда вы даете hist аргумент breaks=4, он знает, что вы хотите 4 бина, но он также будет настаивать на использовании "симпатичных" значений для границ, то есть равномерно распределенных кратных 1,2, 5 раз в десять раз. Также могут быть ограничения на конечных точках.

Давайте рассмотрим, что он делает с вашими данными mtcars $ mpg. Вы можете получить много информации о том, что делает hist, сохранив возвращаемое значение. Я также буду подавлять фактическое построение гистограммы, поскольку сейчас меня интересует только значение.

HV = hist(mtcars$mpg, 4, plot=FALSE)

Вы можете распечатать HV и увидеть, что есть много информации о гистограмме. Все, что нас волнует, хранится в breaks.

HV$breaks
[1] 10 15 20 25 30 35

Это дает 6 граничных значений для бинов (необходимо 5 бинов 6 граничных значений). Но мы попросили 4 контейнера, а не 5! Если вы разделите диапазон 10-35 на четыре корзины вы получаете границы 10, 16,25, 22,5, 28,75 и 35. Это не «красивые» граничные значения. Вместо этого hist использует функцию pretty, чтобы найти более хорошие значения для границ, но это означает, что он должен отказаться от использования 4 корзин.

Сколько точек останова мы получаем для диапазона значений разрывов? Давайте попробуем 2 перерыва до 20 перерывов.

sapply(2:20, function(n) 
    length(hist(mtcars$mpg, n, plot=FALSE)$breaks))
 [1]  4  4  6  6  6  6  6 13 13 13 13 13 13 13 13 25 25 25 25

Примечание еще раз: 4 точки останова означают 3 корзины. 6 точек останова означают 5 корзин. Есть только четыре разных расщепления, которые созданы. Что они?

unique(lapply(2:20, function(n) hist(mtcars$mpg, n, plot=FALSE)$breaks))
[[1]]
[1] 10 20 30 40
[[2]]
[1] 10 15 20 25 30 35
[[3]]
 [1] 10 12 14 16 18 20 22 24 26 28 30 32 34
[[4]]
 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

Границы меняются на 10, 5, 2 или 1 - довольно границы.

Если вы хотите иметь больше контроля, вы должны быть в состоянии указать где вы хотите границы. Это то, что я сделал в примере выше. Еще одна опция для указания breaks:

вектор, задающий контрольные точки между ячейками гистограммы

Это то, что я использовал, когда указал seq(10,35, length.out=5). Но обратите внимание на значения:

seq(10,35, length.out=5)
[1] 10.00 16.25 22.50 28.75 35.00

Не красиво.

Так что вы можете сделать это легко и красиво, но без хорошего контроля над количеством бункеров ИЛИ вы можете контролировать количество бункеров за счет большего количества работы и более уродливых границ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...