Оценка приблизительного распределения данных на основе гистограммы

111

Предположим, я хочу посмотреть, являются ли мои данные экспоненциальными на основе гистограммы (то есть смещены вправо).

В зависимости от того, как я сгруппирую или скопирую данные, я могу получить совершенно разные гистограммы.

Один из наборов гистограмм, по-видимому, будет экспоненциальным. Другой набор покажет, что данные не являются экспоненциальными. Как сделать так, чтобы определяющие распределения по гистограммам были четко определены?

guestoeijreor
источник
20
Почему бы не забыть о гистограммах, потому что проблемы, которые вы описываете, хорошо установлены, и рассмотрите альтернативные инструменты, такие как графики qq и тесты на пригодность?
whuber

Ответы:

163

Сложность использования гистограмм для определения формы

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

Эта проблема давно известна *, хотя, возможно, не так широко, как следовало бы - ее редко упоминают в обсуждениях на элементарном уровне (хотя есть исключения).

* например, Пол Рубин [1] выразился так: « Хорошо известно, что изменение конечных точек в гистограмме может существенно изменить ее внешний вид ». ,

Я думаю, что это проблема, которая должна быть более широко обсуждена при представлении гистограмм. Я приведу несколько примеров и обсуждение.

Почему вы должны опасаться полагаться на одну гистограмму набора данных

Посмотрите на эти четыре гистограммы:

Четыре гистограммы

Это четыре очень разные гистограммы.

Если вы вставите следующие данные (я использую R здесь):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

Тогда вы можете создать их самостоятельно:

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

Теперь посмотрите на этот график:

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 стрип-чарта

(Если это еще не очевидно, что происходит , когда вы вычитать данные Энни из каждого набора: head(matrix(x-Annie,nrow=40)))

Данные просто смещались влево каждый раз на 0,25.

Тем не менее, впечатления, которые мы получаем от гистограмм - перекос вправо, униформа, перекос налево и бимодальный - были совершенно разными. Наше впечатление полностью зависело от расположения первого бункера относительно минимума.

Так что не просто «экспоненциально» против «не совсем экспоненциально», а «наклон вправо» против «перекоса влево» или «бимодальный» против «равномерного», просто двигаясь туда, где начинаются ваши контейнеры.


Изменить: Если вы измените ширину бина, вы можете получить что-то вроде этого:

Скос против колокола

Это одинаковые 34 наблюдения в обоих случаях, просто разные точки останова, одна с шириной бина а другая с шириной бина .0,810.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

Отличная, а?

Да, эти данные были специально созданы для этого ... но урок очевиден - то, что вы видите в гистограмме, может не быть особенно точным представлением данных.

Что мы можем сделать?

Гистограммы широко используются, их часто удобно получать, а иногда и ожидаемо. Что мы можем сделать, чтобы избежать или смягчить такие проблемы?

Как отмечает Ник Кокс в комментарии к смежному вопросу : эмпирическое правило всегда должно заключаться в том, что детали, устойчивые к изменениям ширины бункера и происхождения бункера, скорее всего, будут подлинными; детали, хрупкие к таковым, могут быть ложными или тривиальными .

По крайней мере, вы всегда должны делать гистограммы в нескольких разных значениях ширины бина или источниках бина, или предпочтительно в обоих.

В качестве альтернативы, проверьте оценку плотности ядра при не слишком широкой полосе пропускания.

Еще один подход, который уменьшает произвольность гистограмм, это усредненные сдвинутые гистограммы ,

Усредненная сдвинутая гистограмма

(это один из последних наборов данных), но если вы пойдете на это, я думаю, вы могли бы также использовать оценку плотности ядра.

Если я делаю гистограмму (я использую их, несмотря на то, что остро осознаю проблему), я почти всегда предпочитаю использовать значительно больше бинов, чем обычно дают стандартные программные значения по умолчанию, и очень часто мне нравится делать несколько гистограмм с различной шириной бина (и, иногда, происхождение). Если они достаточно последовательны во впечатлении, вы вряд ли столкнетесь с этой проблемой, и если они непоследовательны, вы знаете, что нужно посмотреть более внимательно, возможно, попробовать оценку плотности ядра, эмпирический CDF, график QQ или что-то в этом роде. аналогичный.

Хотя иногда гистограммы могут вводить в заблуждение, коробочные графики еще более подвержены таким проблемам; с боксплотом у вас даже нет возможности сказать «используйте больше корзин». Посмотрите на четыре очень разных набора данных в этом посте , все с одинаковыми, симметричными диаграммами, хотя один из наборов данных довольно искажен.

[1]: Рубин, Пол (2014) «Злоупотребление гистограммой!»,
Сообщение в блоге, ИЛИ в мире акушерства , 23 января 2014 г.
ссылка ... (альтернативная ссылка)

Glen_b
источник
1
Практически каждый граф необходимости объединяет такие данные. Контейнеры просто достаточно малы (ширина одного пикселя вдоль оси), что это не имеет значения?
AJMansfield
1
@AJMansfield Это немного похоже на высказывание «каждый дистрибутив дискретен» - хотя в буквальном смысле это скрывает соответствующую проблему. Типичное количество блоков в оценщике с разбивкой по размерам значительно меньше, чем типичное количество пикселей ... и с любой графикой, использующей сглаживание, «эффективное» количество пикселей больше (поскольку потенциально можно различить различия позиций между пикселями)
Glen_b
2
Основная проблема заключается в том, что гистограммы в значительной степени зависят от размера бина. Сложно определить это априори.
29

Плотность ядра или график logspline могут быть лучшим вариантом по сравнению с гистограммой. Есть все еще некоторые параметры, которые могут быть установлены этими методами, но они менее изменчивы, чем гистограммы. Есть также qqplots. Хороший инструмент для определения того, достаточно ли близки данные к теоретическому распределению, подробно описан в:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

Короткая версия идеи (все еще читайте статью для деталей) заключается в том, что вы генерируете данные из нулевого распределения и создаете несколько графиков, один из которых является исходными / реальными данными, а остальные моделируются из теоретического распределения. Затем вы представляете графики кому-то (возможно, себе), который не видел исходных данных, и смотрите, смогут ли они выбрать реальные данные. Если они не могут идентифицировать реальные данные, то у вас нет доказательств против нуля.

vis.testФункция в пакете TeachingDemos для R помочь реализовать форму этого теста.

Вот быстрый пример. Один из графиков ниже - это 25 точек, сгенерированных из распределения с 10 степенями свободы, остальные 8 - из нормального распределения с тем же средним и дисперсией.

введите описание изображения здесь

vis.testФункция создал этот участок , а затем предлагает пользователю выбрать , какой из участков , по их мнению, отличается, то процесс повторяется еще 2 раза (3 всего).

Грег Сноу
источник
@ ScottStafford, я добавил копию сюжета выше. Этот использует qqplots, но функция также будет генерировать гистограммы или графики плотности могут быть запрограммированы.
Грег Сноу,
28

Кумулятивные графики распределения [ MATLAB , R ] - где вы отображаете долю значений данных, меньших или равных диапазону значений, - безусловно, лучший способ взглянуть на распределения эмпирических данных. Вот, например, ECDF этих данных , полученных в R:

Элис, Брайан, Крис и Зои ECDF сюжеты

Это может быть сгенерировано с помощью следующего входа R (с вышеуказанными данными):

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

Как видите, визуально очевидно, что эти четыре распределения являются просто переводами друг друга. В целом, преимущества ECDF для визуализации эмпирического распределения данных:

  1. Они просто представляют данные в том виде, как они на самом деле происходят без каких-либо преобразований, кроме накопления, поэтому нет никакой возможности случайно обмануть себя, как в случае с гистограммами и оценками плотности ядра, из-за того, как вы обрабатываете данные.
  2. Они дают четкое визуальное представление о распределении данных, поскольку каждая точка буферизируется всеми данными до и после нее. Сравните это с некумулятивными визуализациями плотности, где точность каждой плотности естественным образом не буферизуется и, следовательно, должна оцениваться либо с помощью биннинга (гистограммы), либо сглаживания (KDE).
  3. Они работают одинаково хорошо независимо от того, соответствуют ли данные хорошему параметрическому распределению, некоторой смеси или грязному непараметрическому распределению.

Единственная хитрость заключается в том, чтобы научиться правильно читать ECDF: мелкие наклонные области означают разреженное распределение, крутые наклонные области означают плотное распределение. Однако, как только вы научитесь читать их, они станут замечательным инструментом для просмотра распределений эмпирических данных.

StefanKarpinski
источник
Есть ли документация для чтения CDF? например, что если мой дистрибутив cdf, как вы показали выше, то как мы можем классифицировать \ угадать его как chisquare, нормальный или другой дистрибутив на основе внешнего вида
stats101
2

Предложение: Гистограммы обычно только назначают данные по оси x, которые произошли в средней точке ячейки, и пропускают измерения по оси x с большей точностью. Эффект, который это имеет на производных соответствия, может быть довольно большим. Давайте возьмем тривиальный пример. Предположим, что мы берем классический вывод дельты Дирака, но модифицируем его так, чтобы мы начали с распределения Коши в некотором произвольном срединном местоположении с конечным масштабом (полувысота полной ширины). Тогда мы берем предел, поскольку масштаб приближается к нулю. Если мы используем классическое определение гистограммы и не меняем размеры бинов, мы не фиксируем ни местоположение, ни масштаб. Однако, если мы используем срединное местоположение в ячейках даже фиксированной ширины, мы всегда будем фиксировать местоположение, если не масштаб, когда масштаб мал относительно ширины ячейки.

Для подгонки значений, когда данные искажены, использование фиксированных средних точек ячейки сместит ось X всего сегмента кривой в этой области, что, как я полагаю, относится к вопросу выше.

ШАГ 1 смешно хистоВот почти решение. Я использовалn=8в каждой категории гистограммы, и просто отображал их как среднее значение оси X для каждого бина. Поскольку каждая ячейка гистограммы имеет значение 8, все распределения выглядят одинаково, и мне пришлось сместить их по вертикали, чтобы показать их. Дисплей не правильный ответ, но он не без информации. Это правильно говорит нам о наличии смещения по оси X между группами. Это также говорит нам о том, что фактическое распределение выглядит слегка U-образным. Почему? Обратите внимание, что расстояние между средними значениями находится дальше в центрах и ближе к краям. Таким образом, чтобы сделать это лучшее представление, мы должны заимствовать целые выборки и дробные количества каждой выборки границы бина, чтобы сделать все средние значения бина на равноудаленной оси x. Исправление и правильное отображение потребует немного программирования. Но, это может быть просто способ создания гистограмм, чтобы они фактически отображали основные данные в некотором логическом формате. Форма будет по-прежнему изменяться, если мы изменим общее количество бинов, охватывающих диапазон данных, но идея состоит в том, чтобы решить некоторые из проблем, созданных произвольным биннингом.

ШАГ 2 Итак, давайте начнем заимствовать между корзинами, чтобы попытаться сделать средства более равномерно распределенными.введите описание изображения здесь

Теперь мы видим, как начинает формироваться гистограмма. Но разница между средними значениями не идеальна, так как у нас есть только целые числа выборок, которые можно поменять местами. Чтобы снять ограничение целочисленных значений по оси Y и завершить процесс создания равноудаленных средних значений по оси X, мы должны начать разделять доли выборки между ячейками.

Шаг 3 Разделение ценностей и частей ценностей. histo3

Как можно видеть, совместное использование частей значения на границе ячейки может улучшить равномерность расстояния между средними значениями. Мне удалось сделать это до трех знаков после запятой с данными. Однако, я не думаю, что я не могу сделать расстояние между средними значениями в целом одинаковым, так как грубость данных не позволит этого сделать.

Можно, однако, сделать другие вещи, такие как использовать оценку плотности ядра .

Здесь мы видим данные Энни как ограниченную плотность ядра с использованием гауссовых сглаживаний 0,1, 0,2 и 0,4. Другие субъекты будут иметь сдвинутые функции того же типа, при условии, что они будут делать то же самое, что и я, а именно использовать нижнюю и верхнюю границы каждого набора данных. Таким образом, это уже не гистограмма, а PDF, и он выполняет ту же роль, что и гистограмма без некоторых бородавок.

kernelsmooth

деревенщина
источник