Альтернативная графика для «обработки линейки» графиков


15

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

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

«Ручки» чередуются между стандартными ошибками и стандартными отклонениями в зависимости от автора. Как правило, размеры выборки для каждого «бара» довольно малы - около шести.

Эти сюжеты, кажется, особенно популярны в биологических науках - см. Несколько первых статей BMC Biology, том 3 .

Так как бы вы представили эти данные?

Почему мне не нравятся эти участки

Лично мне не нравятся эти сюжеты.

  1. Когда размер выборки невелик, почему бы просто не отобразить отдельные точки данных.
  2. Это SD или SE, который отображается? Никто не согласен с тем, что использовать.
  3. Зачем вообще использовать бары. Данные (обычно) не идут от 0, но первый проход на графике предполагает, что это происходит.
  4. Графики не дают представления о диапазоне или размере выборки данных.

R скрипт

Это код R, который я использовал для создания графика. Таким образом, вы можете (если хотите) использовать те же данные.

                                        #Generate the data
set.seed(1)
names = c("A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3")
prevs = c(38, 37, 31, 31, 29, 26, 40, 32, 39)

n=6; se = numeric(length(prevs))
for(i in 1:length(prevs))
  se[i] = sd(rnorm(n, prevs, 15))/n

                                        #Basic plot
par(fin=c(6,6), pin=c(6,6), mai=c(0.8,1.0,0.0,0.125), cex.axis=0.8)
barplot(prevs,space=c(0,0,0,3,0,0, 3,0,0), names.arg=NULL, horiz=FALSE,
        axes=FALSE, ylab="Percent", col=c(2,3,4), width=5, ylim=range(0,50))

                                        #Add in the CIs
xx = c(2.5, 7.5, 12.5, 32.5, 37.5, 42.5,  62.5, 67.5, 72.5)
for (i in 1:length(prevs)) {
  lines(rep(xx[i], 2), c(prevs[i], prevs[i]+se[i]))
  lines(c(xx[i]+1/2, xx[i]-1/2), rep(prevs[i]+se[i], 2))
}

                                        #Add the axis
axis(2, tick=TRUE, xaxp=c(0, 50, 5))
axis(1, at=xx+0.1, labels=names, font=1,
     tck=0, tcl=0, las=1, padj=0, col=0, cex=0.1)

6
Помочь вашей области прийти к консенсусу только по вопросу SE v. SD было бы огромным шагом вперед. Они имеют в виду совершенно разные вещи.
Джон

Я согласен - SE обычно выбирают, потому что он дает меньший регион!
csgillespie

Может быть, более информативное название?

3
Просто для справки, я видел эти гистограммы с барами ошибок, которые назывались «Графики динамита» ранее. Вот несколько ссылок, дающих точно такие же рекомендации, как и у всех остальных (точечные диаграммы). Тацуки Кояма, Остерегайтесь Динамит Плакат и Drummond & Vowler, 2011 .
Энди В.

1
Пожалуйста, добавьте изображение еще раз, если можете. На этот раз используйте загрузчик изображений, чтобы он не стал мертвой ссылкой.
Эндолит

Ответы:


16

Спасибо за все ваши ответы. Для полноты я подумал, что мне следует включить то, что я обычно делаю. Я склонен делать комбинацию из приведенных предложений: точки, диапазоны (когда n большое) и se (или sd) диапазоны.

( Удалено модератором, поскольку сайт, на котором размещено изображение, больше не работает правильно. )

Из точечного графика видно, что данные гораздо более разбросаны, как показывают графики «панели управления». На самом деле, в A3 есть отрицательное значение!


Я сделал этот ответ CW, поэтому я не получаю репутацию


3
Это хороший ответ. Кроме того, я бы предложил горизонтальное дрожание точек, чтобы они не перекрывались, особенно если у вас больше точек на группу, чем эта. В ggplot2 это сделает geom_jitter ().
Харлан

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

1
Мне также нравятся диаграммы рассеяния для небольших наборов данных (примечание: я использую термин «точечная диаграмма» для обозначения немного другого графика). Однако, что бы ни стоило, вышеприведенная полоса чище и легче для чтения, чем эта. Я не уверен, что это делает это лучше, но на это стоит обратить внимание.
gung - Восстановить Монику

@ Харлан: В качестве альтернативы, сделать точки прозрачными, чтобы несколько точек складывались и создавали более темную точку?
эндолит

у вас есть оригинальное изображение, чтобы заменить эту мертвую ссылку?
эндолит

10

Основной доклад Фрэнка Харрелла под названием «Информационная аллергия» при использовании R! В прошлом месяце были показаны альтернативы этим: вместо того, чтобы скрывать необработанные данные посредством агрегации, которую обеспечивают столбцы, необработанные данные также отображаются в виде точек (или точек). "Зачем скрывать данные?" был комментарий Фрэнка.

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


1
Это доступно как видео? Это звучит здорово.
Хенрик

1
Я думаю, что слово «будет в конечном итоге» - основные записи были записаны.
Дирк Эддельбюттель

1
это легко в ggplot, я думаю, то есть had.co.nz/ggplot2/geom_jitter.html
Майк Дьюар,

1
jitterтакже в простой R.

2
Просто для протокола, разговор Фрэнка (в видео) теперь онлайн: r-bloggers.com/RUG/2010/08/user-2010-conference-videos
Тал Галили

7

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

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

Наконец, на графике выше вы только добавляете столбцы ошибок выше значения, что ограничивает способность сравнивать интервалы неопределенности относительно столбцов выше и ниже значения.

Вот как я могу построить данные (через пакет ggplot2). Обратите внимание, что я добавляю линии, соединяющие точки в одной серии; некоторые утверждают, что это уместно только тогда, когда ряды, между которыми соединены линии, являются числовыми (как, кажется, в этом случае), однако до тех пор, пока существует какая-либо разумная порядковая связь между уровнями переменной оси x, я думаю, соединительные линии полезны для того, чтобы помочь глазу связать точки на оси х. Это может стать особенно полезным для обнаружения взаимодействий, которые действительно выделяются линиями.

library(ggplot2)
a = data.frame(names,prevs,se)
a$let = substr(a$names,1,1)
a$num = substr(a$names,2,2)
ggplot(data = a)+
layer(
    geom = 'point'
    , mapping = aes(
        x = num
        , y = prevs
        , colour = let
        , shape = let
    )
)+
layer(
    geom = 'line'
    , mapping = aes(
        x = num
        , y = prevs
        , colour = let
        , linetype = let
        , group = let
    )    
)+
layer(
    geom = 'errorbar'
    , mapping = aes(
        x = num
        , ymin = prevs-se
        , ymax = prevs+se
        , colour = let
    )
    , alpha = .5
    , width = .5
)

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


1
Я должен добавить, что моя рекомендация «построить только данные и неопределенность» должна быть квалифицированной: при представлении данных аудитории, которая имеет опыт / знания в отношении отображаемой переменной, отображайте только данные и неопределенность. При представлении данных наивной аудитории, и когда ноль является значимой точкой данных, я сначала покажу данные, расширяющиеся до нуля, чтобы аудитория могла ориентироваться в масштабе, а затем увеличил масштаб, чтобы показать только данные и неопределенность.
Майк Лоуренс

так как у вас возникли проблемы с написанием кода R, не могли бы вы включить изображение в формате JPEG конечного графика. Я считаю, что просто загрузить изображение на img84.imageshack.us и сделать ссылку на него довольно просто. О, спасибо за ответ :)
csgillespie

@csgillespie: готово.
Майк Лоуренс

Я обнаружил, что легче читать такой график с geom_ribbon()указанием ошибки. Если вам не нравится создавать очевидные оценки для областей от 1 до 2, по крайней мере, уменьшите ширину полосы ошибок.
JoFrhwld

@JoFrwld: Мне тоже нравятся ленты, хотя я склонен резервировать их для случаев, когда переменная оси X действительно числовая; моя версия правила «не рисовать линии, если переменная оси x не числовая», которую я исповедую, нарушая в своем ответе выше: Op
Майк Лоуренс,

2

Мне интересно, почему вам не нравятся эти сюжеты. Я использую их все время. Не желая заявлять о явном расцвете, они позволяют сравнивать средние значения различных групп и видеть, перекрываются ли их 95% ДИ (т. Е. Истинное среднее значение, вероятно, будет различным).

Мне кажется, важно получить баланс простоты и информации для разных целей. Но когда я использую эти графики, я говорю: «эти две группы отличаются друг от друга в некотором важном смысле» [или нет].

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


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

1
@Chris проверьте это о интерпретации перекрывающихся CIs pubs.amstat.org/doi/abs/10.1198/000313001317097960 Также оригинальный вопрос также связан с путаницей использования SE или SD взаимозаменяемо, в то время как это две разные вещи
tosonb1

Или, для анализа на этом сайте, см. Stats.stackexchange.com/questions/18215 . @ tosonb1 Срок действия вашей ссылки истек. Не могли бы вы предоставить ссылку на газету?
whuber

2

Если данные являются показателями : это количество успехов, деленное на количество испытаний, то очень элегантный метод - это воронкообразный график. Например, см. Http://qshc.bmj.com/content/11/4/390.2.full (извинения, если для ссылки требуется подписка - дайте мне знать, и я найду другую).

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

ОБНОВИТЬ:

Вот ссылка на пример, который не требует подписки (и имеет хорошее объяснение того, как их можно использовать): http://understandingunterminty.org/fertility

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

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


Данные не являются необходимыми ставками. Это может быть что угодно.
csgillespie

Ссылка на подписку, к сожалению.
Мэтт Паркер

... но вот ссылка на Википедию на воронках: en.wikipedia.org/wiki/Funnel_plot
Мэтт Паркер,

2

Я хотел бы использовать boxplots здесь; чистый, содержательный, непараметрический ... Или виоплот, если рассылка более интересная.


2
Я не уверен, что при таком маленьком размере выборки (n = 6) подходят коробочные или виоплоты
csgillespie,

Да, я признаю, что недостаточно внимательно прочитал вопрос, так что это была довольно общая идея; тем не менее, я думаю, что 6 баллов - это минимум, но этого достаточно для бокса. Я провел несколько экспериментов, и они были значимыми. С другой стороны, очевидно, что на блокпосте не указано количество наблюдений (что является здесь важной информацией), поэтому я бы предпочел использовать комбинацию этого и точек.

С 6 точками - точечная диаграмма, вероятно, лучше всего (возможно, с добавлением красной точки для среднего значения)
Тал Галили

2
Я обычно использую боксы с наложенными точками, я нахожу это очень "визуальным". На мой взгляд, скриптовые сюжеты немного сложны для понимания.
Nico

1
@csgillespie: Что бы указывало на то, что бары и усы лучше? Они показывают в основном ту же информацию, что и блокпост (как вы указываете, усы могут представлять разные вещи), они просто выдают ошибку только в одном направлении, что может быть довольно запутанным, если не нечестным ... Не споря о блокпостах , Но beanplots / violinplots все еще должны работать, даже для сравнительно небольших размеров выборки, потому что это просто оценка плотности Гаусса, как я объяснил здесь .
naught101

1

Упрощение потрясающего кода @ csgillespie сверху:

qplot(
    data=a,
    x=num,
    y=prevs,
    colour=let,
    shape=let,
    group=let,
    ymin=prevs-se,
    ymax=prevs+se,
    position=position_dodge(width=0.25),
    geom=c("point", "line", "errorbar")
    )

0

Я предпочитаю geom_pointrange панели ошибок и думаю, что линии отвлекают, а не помогают. Вот версия, которую я нахожу намного чище, чем версия @James или @csgillespie:

qplot(
 data=a,
 x=num,
 y=prevs,
 colour=let,
 ymin=prevs-se,
 ymax=prevs+se,
 position=position_dodge(width=0.25),
 geom=c("pointrange"), size=I(2)
 )
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.