Boxplot еквівалент для важкохвостих розподілів?


13

Для приблизно нормально розповсюджених даних, боксплоти - це прекрасний спосіб швидкої візуалізації медіани та розповсюдження даних, а також наявності будь-яких залишків.

Однак для більш важкохвостих розподілів, багато очок відображаються як екслієри, оскільки люди, що визначають перешкоди, визначаються як такі, що не мають фіксованого коефіцієнта IQR, і це, звичайно, відбувається набагато частіше при важкохвостих розподілах.

То що люди використовують для візуалізації такого роду даних? Чи є щось більш пристосоване? Я використовую ggplot на R, якщо це має значення.


1
Зразки з важкохвостих розподілів мають величезний діапазон порівняно з середнім 50%. Що ти хочеш з цим зробити?
Glen_b -Встановити Моніку

7
Кілька відповідних тем вже є, наприклад, stats.stackexchange.com/questions/13086/… Коротка відповідь включає спочатку перетворення! гістограми; квантові сюжети різних видів; смугові сюжети різних видів.
Нік Кокс

@Glen_b: це якраз моя проблема, що робить коробки нечитабельними.
static_rtti

2
Річ у тім, що може бути зроблено більше ніж одне ... так що ти хочеш ?
Glen_b -Встановити Моніку

2
Можливо, варто відзначити, що більша частина статистичного світу знає коробки з їх іменування та (повторного) введення Джона Тукі в 1970-х. (Вони були використані на кілька десятиліть раніше в кліматології та географії.) Але в пізніших розділах його книги про аналіз дослідницьких даних 1977 року (Reading, МА: Аддісон-Уеслі) він має зовсім інші ідеї щодо управління важкохвостими розподілами. Здається, що ніхто не зачепився взагалі. Але квантильні сюжети в подібному дусі.
Нік Кокс

Відповіді:


8

Центральна проблема ОП , як видається, є те , що вони мають дуже важкі-хвостаті дані - і я не думаю , що більшість справжніх відповідей фактично маємо справу з цим питанням на всіх , тому я просування мій попередній коментар до відповіді.

Якщо ви хочете залишитися з боксерськими плитами, деякі варіанти перераховані нижче. Я створив деякі дані в R, які показують основну проблему:

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

незадовільний боксер

Середня половина даних зводиться до крихітної смужки шириною пару мм. Ця ж проблема стосується більшості інших пропозицій - включаючи сюжети QQ, смугові діаграми, вулик / бджолині сюжети та скрипки.

Тепер кілька потенційних рішень:

1) перетворення ,

Якщо журнали або обертання створюють читабельну коробку, вони можуть бути дуже хорошою ідеєю, і оригінальний масштаб все ще може бути показаний на осі.

Велика проблема полягає в тому, що іноді немає «інтуїтивної» трансформації. Існує менша проблема, що хоча кванти самі перекладаються монотонними перетвореннями досить добре, огорожі не мають; якщо ви просто застосуєте трансформовані дані (як я це робив тут), вуса будуть відрізнятися x-значеннями, ніж у вихідному сюжеті.

boxplot перетворених значень

Тут я використав зворотний-гіперболічний-гріх (асинх); це щось на зразок журналу в хвостах і подібне до лінійного біля нуля, але люди, як правило, не знаходять це інтуїтивно зрозумілим перетворенням, тому в цілому я б не рекомендував цей варіант, якщо не очевидно досить інтуїтивно зрозуміле перетворення на зразок журналу. Код для цього:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2) масштабні перерви - візьміть крайні залишки і стисніть їх у вузькі вікна на кожному кінці зі значно більш стислим масштабом, ніж у центрі. Я настійно рекомендую зробити повну перерву в усьому масштабі, якщо ви це зробите.

коробка з перервами на шкалі

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3) обрізання крайніх переживачів (що я зазвичай не радив би, не вказуючи це дуже чітко, але це виглядає як наступний сюжет, без "<5" і "2>" в будь-якому кінці), і

4) те, що я називатиму «стрілками-екстремалами» - аналогічно обрізці, але з урахуванням підрахунку значень на кожному кінці

boxplot із кількістю та стрілками, що вказують на крайні значення

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

Дякуємо, що знайшли час, щоб написати це! Це саме та відповідь, яку я очікував. Тепер мені потрібно лише з’ясувати, як реалізувати ці сюжети за допомогою R :)
static_rtti

1
Зараз є якийсь код. Я не дав код для 3), оскільки це простіша версія 4); ви повинні мати можливість це отримати, вирізавши з цього лінії.
Glen_b -Встановити Моніку

Між іншим, більшість цих ідей працюють і з іншими запропонованими тут чудовими дисплеями - стрибаними стрипчертами та сюжетами бджолиних вуликів та скрипками та ін.
Glen_b -Встановити Моніку

Знову дякую. Я впевнений, що ця відповідь буде корисна досить багатьом людям.
static_rtti

Я згоден, це вирішує питання набагато краще, ніж моя відповідь. Хороший матеріал.
TooTone

4

Особисто мені подобається використовувати стриптиз з тремтінням принаймні, щоб відчути дані. Наведена нижче ділянка з решіткою в R (вибачте, не ggplot2). Мені подобаються ці сюжети, тому що їх дуже легко інтерпретувати. Як ви кажете, одна з причин цього полягає в тому, що трансформації не відбувається.

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

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

Пакет бджолиного тепла пропонує чудову альтернативу стриптизу (спасибі @January за пропозицію).

beeswarm(df2$values ~ df2$ind)

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

З вашими даними, оскільки вони зазвичай нормально поширюються, у цьому випадку може спробувати ще одна річ qqplot, qqnorm .

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

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


2
Мені також подобаються стриптизли, але питання в тому, що явно робити з дистрибутивами з великим хвостом.
Нік Кокс

1
Справа лише в тому, що поради щодо використання, наприклад, qqnorm, не відповідають питанню. Я погоджуюся, що інші види квантильно-квантильних сюжетів можуть бути дуже гарною ідеєю, як я вже згадував раніше.
Нік Кокс

1
Навіть кращі, ніж стриптиз з R, - це сюжети з beeswarmупаковки.
січня

1
@January Так здорово, я додаю це у свою відповідь (якщо ви заперечуєте, будь ласка, так).
TooTone

1
Мою відповідь було розміщено на сайті stats.stackexchange.com/questions/13086 , що я розглядаю як (невідомо більш вузьку) версію цього питання. Я підсумував це як "не змінюйте алгоритм boxplot: замість цього повторно висловіть дані". Питання, на яке натякають "адаптовані" у цьому питанні, вирішуються стандартними прийомами дослідницького аналізу даних для пошуку корисних повторних виразів змінних.
whuber

2

Можна приклеїтись до коробчастих машин. Існують різні можливості визначення вусів. Залежно від товщини хвоста, кількості зразків та толерантності до лишків можна вибрати два більш-менш екстремальних квантили. Враховуючи вашу проблему, я б уникав вусів, визначених за допомогою IQR.
Якщо, звичайно, ви не хочете трансформувати свої дані, що в цьому випадку ускладнює розуміння.


1
Останнє речення занадто некваліфіковане, щоб пройти без коментарів. Трансформація не є панацеєю, але не трансформація сильно перекошених даних не полегшує розуміння. Якщо дані є позитивними, ви можете принаймні спробувати скористатися кореневою, логарифмічною або зворотною шкалою. Якщо це дійсно не допомагає, тоді відмовтесь.
Нік Кокс

До яких труднощів у розумінні перекошених даних ви звертаєтесь? Ті, у кого вуса залежні від IQR? Ця проблема навіть із легкими хвостами. І хіба ми не говоримо про важкі хвости, незалежно від косості? Трансформації, що освітлюють хвости, безумовно, дають більш звичайні коробки, але додають шар інтерпретації, торгуючи розумінням комфорту. Але можна назвати цю особливість, якщо йому подобається.
Кварц

2
Перетворення часто допомагають: це мій підсумок. Людина статистики, яка не дізналася, що багато речей виглядає зрозуміліше в логарифмічному масштабі (особливо), серйозно пропускає один із найстаріших і найефективніших хитрощів. Ви ніби заперечували це; Сподіваюся, я вас неправильно прочитав.
Нік Кокс

1
Я не погоджуюсь. Я весь час перетворюю дуже перекошені дані, і мій досвід полягає в тому, що це набагато більше, ніж питання естетики. Це часто працює. Анонімний статистик деякий час тому писав, що лонормальне є більш нормальним, ніж нормальне. Він / вона був трохи вибагливим, але тут є і важлива правда. (Не те, що багато інших дистрибутивів можуть бути не краще.)
Нік Кокс

1
Напевно, мені потрібно зупинитися тут, щоб дозволити іншим судити, але мій погляд не ексцентричний. Трансформація обговорюється як одна з можливостей, наприклад, stats.stackexchange.com/questions/13086/…. Я пропоную вам відповісти або прокоментувати там, щоб пояснити, чому ця порада не є голосною.
Нік Кокс

0

Я припускаю, що це питання стосується розуміння даних (на відміну від "керування" ними)
Якщо дані важко хворі та / або мультимодальні, я вважаю ці "шари" ggplot2 дуже корисними для цієї мети: geom_violinі geom_jitter.


3
Не могли б ви підсумувати, чому сюжетні скрипки та / або тремтіння балів були б корисними при важких дистрибутивах?
chl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.