Как вы можете визуализировать отношения между 3 категориальными переменными?


21

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

В настоящее время я использую следующие три графика: введите описание изображения здесь

Каждый график показывает уровень базовой депрессии (слабый, умеренный, тяжелый). Затем на каждом графике я смотрю на связь между лечением (0,1) и улучшением депрессии (нет, умеренное, значительное).

Эти 3 графика работают, чтобы увидеть 3-стороннюю взаимосвязь, но есть ли известный способ сделать это с одним графиком?


4
Размещение данных позволит людям играть.
Ник Кокс,

1
У вас есть 3 базовые категории, 2 категории лечения и 3 исхода депрессии. Учитывая последнее. пропорции каждого типа депрессии могут быть отображены 6 точками на треугольном (трилинейном, троичном) графике.
Ник Кокс,

4
Что не так с этими графиками?
Аксакал

Можете ли вы предоставить данные, как запросы @NickCox? Я понимаю, что это только 18 номеров.
gung - Восстановить Монику

Ответы:


12

Это интересный набор данных, который нужно представить графически, отчасти потому, что он не совсем категоричен. Оба трехуровневых фактора являются порядковыми, и между ними возможно взаимодействие (по-видимому, для него сложнее mild baselineиметь substantial improvement- или, может быть, substantial improvementдля каждого что-то свое baseline).

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

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

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

Я обычно опасаюсь стеков в целом, потому что сложнее читать средние значения, но это усиливает природу этих данных с фиксированной суммой. И это позволяет легко прочитать сумму moderate+, substantialесли это актуально. Я перевернул порядок improvementуровней, так что чем выше, тем лучше для частоты.

Без суммирования эквивалентом является график наклона.

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

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

Учитывая порядковый характер данных, может быть полезно преобразовать improvementзначение в числовую оценку, как это часто делается с данными Лайкерта . Так , например, none=0, moderate=1, substantial=2. Затем вы можете отобразить эту переменную в непрерывном масштабе. Недостатком является то, что вы должны найти разумную оценку (например, 0, 1 и 5 будет более правильным представлением).

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

Колофон : Эти графики были сделаны с помощью функции Graph Builder в программном пакете JMP (который я помогаю разрабатывать). Несмотря на то, что он сделан в интерактивном режиме, сценарий, например, для участка, без настройки окраски, это:

Graph Builder(
    Graph Spacing( 15 ),
    Variables( X( :treatment ), Y( :frequency ),
        Group X( :baseline ), Overlay( :improvement )
    ),
    Elements( Area( X, Y ) )
);

2
+1. Некоторые отличные идеи здесь. Несмотря на то, что я испытываю тошноту в отношении суммирования, я думаю, что первый график работает лучше всего. Это выявляет интересное взаимодействие: лечение 1 всегда приводит к большему количеству случаев существенного улучшения, а больше - ни к чему!
Ник Кокс

Отличный пост. Можно ли как-то построить 1-й график, который вы отображаете в R? Я не использовал JMP некоторое время.
Алехандро Очоа

1
У @AlejandroOchoa ggplot есть область geom. См. Создание графика с областями с помощью ggplot2 .
Xan

10

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

    improvement  treatment   baseline   frequency  
           none          0       mild          5  
       moderate          0       mild         41  
    substantial          0       mild          4  
           none          1       mild         19  
       moderate          1       mild         19  
    substantial          1       mild         12  
           none          0   moderate         19  
       moderate          0   moderate         24  
    substantial          0   moderate          7  
           none          1   moderate         20  
       moderate          1   moderate         14  
    substantial          1   moderate         16  
           none          0     severe          7  
       moderate          0     severe         21  
    substantial          0     severe         22  
           none          1     severe         12  
       moderate          1     severe         15  
    substantial          1     severe         23  

Вот переделка оригинального дизайна. Одна деталь исходных данных упрощает задачу: количество людей в каждой из комбинаций предикторов одинаково, поэтому частоты построения графиков и проценты построения графиков одинаковы. Здесь вместо столбчатой ​​диаграммы с накоплением (подразделенной, сегментированной) мы выделяем столбцы в двухсторонней диаграмме или в виде таблицы.

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

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

Чтобы объяснить это:

  1. Три панели здесь не нужны, с их повторением осей, легенды и текста.

  2. Легенда - это всегда и проклятие, и благословение, заставляющее читателя мысленно «ходить взад-вперед» (или запоминать легенду, а не то, что привлекает, каким бы легким она ни была). Информативный текст прямо за решеткой легче отслеживать.

  3. Цветовое кодирование фруктового салата не обязательно. Это тоже кажется произвольным: «существенное» улучшение - это большое дело, но я нахожу даже сильный желтый приглушенным цветом. Но нам не нужен цвет, когда у нас есть текст для объяснения.

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

  5. Здесь дань уважения традиционному построению реакции на вертикальной оси, как и в оригинале.

Все это говорит о том, что трудно увидеть много структуры в этих данных. Когда это так, также трудно разделить вину между (а) данными без особой структуры и (б) слабостями графического дизайна для выделения не только эффектов предикторов, но и возможных взаимодействий. Лечение кажется менее важным, чем исходное состояние. Но тогда, если базовый уровень был «умеренным», сколько возможностей было для «существенного» улучшения? Я остановлюсь здесь, чтобы перестать дурить себя, когда изучение данных о психическом здоровье, конечно, не является специализацией, особенно если данные оказываются поддельными. Но если они реальны, мы могли бы сделать с гораздо большим размером выборки. (Обычно мы так говорим, но вот, пожалуйста.)

РЕДАКТИРОВАТЬ График может быть естественно усложнен порядковой цветовой схемой, если это необходимо

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

Для записи: на графиках использован код Stata, включая мою собственную программу, tabplotзагружаемую с помощью ssc inst tabplot.

tabplot improvement group [w=frequency] , showval ///
xmla(1.5 "mild" 3.5 "moderate" 5.5 "severe", noticks labgap(*4) labsize(medsmall)) ///
xla(1 "0" 2 "1" 3 "0" 4 "1" 5 "0" 6 "1") ///
xtitle(baseline and treatment) xsc(titlegap(*4)) bfcolor(emerald*0.2)

tabplot improvement group [w=frequency] , showval ///
xmla(1.5 "mild" 3.5 "moderate" 5.5 "severe", noticks labgap(*4) labsize(medsmall)) ///
xla(1 "0" 2 "1" 3 "0" 4 "1" 5 "0" 6 "1") ///
xtitle(baseline and treatment) xsc(titlegap(*2)) ///
sep(improvement2) bar3(bfcolor(emerald*0.2)) bar2(bfcolor(emerald*0.6)) ///
bar1(bfcolor(emerald)) barall(blcolor(green)) 

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

Это очень красивые сюжеты
shadowtalker

4

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

  • Лечение = 0, базовый уровень = мягкий
  • Лечение = 0, базовый уровень = умеренный
  • Лечение = 0, базовый уровень = тяжелый
  • Лечение = 1, базовый уровень = мягкий
  • Лечение = 1, базовый уровень = умеренный
  • Лечение = 1, базовый уровень = тяжелый

... с одинаковыми значениями по категориям [нет / умеренно / существенно] столбцы гистограммы.


+1. Я согласен с основной идеей, изложенной в моем ответе. Я не могу сказать, насколько близок дизайн моей гистограммы к тому, что вы представляли.
Ник Кокс

Спасибо, ваша диаграмма выглядит великолепно. Вы пытались смотреть на это с обработкой 0/1 как внешней категорией, а базовая линия = слабая / умеренная / тяжелая как категория ближе к оси х? Я думаю, что если бы вы представили это таким образом, вы бы увидели более четкую закономерность - поскольку в ходе лечения = 0, «существенные» полосы улучшения устойчиво растут по мере того, как базовый уровень повышается от слабого / умеренного / тяжелого. И что вы увидите ту же картину (в меньшей степени) в рамках лечения = 1. В общем, я поместил переменную с меньшим количеством категорий (например, лечение здесь) снаружи. Но, может быть, вы уже смотрели на это так.
Максимальная мощность

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

Это имеет смысл для меня.
Максимальная мощность

4

Разве участок мозаики специально не предназначен для этой цели?

В R это было бы как

library(vcd)
d = read.table("data.dat", header=TRUE)
tab = xtabs(frequency ~ treatment+baseline+improvement, data=d)
mosaic(data=tab,~ treatment+baseline+improvement, shade=TRUE, cex=2.5)

Каждая категориальная переменная идет к одному краю квадрата, который подразделяется на метки. (Таким образом, если вы подразделяете каждое ребро только на один уровень, можно представить не более 4 категориальных переменных. ИМХО, после 3 это становится грязным и труднее интерпретировать). Размер прямоугольников пропорционален частоте. Это основная идея мозаичного сюжета, и в этом ответе и в ответе Павла Клекки то же самое.

Различия заключаются в расположении этих прямоугольников и «тонкостях», предоставляемых конкретным R-пакетом, используемым для этого типа графика. Как видно из ответа Павла Клека, graphicsпакет делит верхний край на 2 уровня вместо использования правого края. Я использовал vcdпакет с параметрами по умолчанию, поэтому цвет указывает на степень связи между переменными. Серый означает, что данные соответствуют (вы не можете отклонить гипотезу) переменной независимости. Синий цвет означает, что существует положительная связь между «серьезным» исходным уровнем и «существенным» улучшением как для «0», так и для «1» лечения. (Сюрприз, удивление! Я перевожу это следующим образом: если у вас тяжелая депрессия, вы, вероятно, значительно поправитесь вне зависимости от того, проходите ли вы лечение или нет.

Можно настроить сюжет в соответствии со своими потребностями, см., Например, здесь . В пакете также есть несколько виньеток, гугл "пример мозаики vcd" (как я только что сделал). Статья в Википедии, процитированная в самом начале, также объясняет, как построить этот тип сюжета и интуицию за ним.

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

Когда вы сравниваете мою фотографию с изображением в ответе Павла Клека, не имеет значения, что «лечение» находится на левом краю каждой фотографии. Вы можете легко изменить положение края, изменив последнюю строку моего кода и настроить макет в соответствии со своими потребностями. Обычная практика заключается в том, что слева идет самая важная переменная или переменная с наименьшим количеством меток. Вы также можете изменить порядок меток (например, чтобы у правого края порядок был «не умеренно существенным»), сделав соответствующую факторную переменную в R упорядоченной и отрегулировав ее уровни.


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

@NickCox этот, безусловно, выглядит не так, как другие. Они вряд ли один и тот же дисплей
shadowtalker

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

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

@ Ник Кокс Спасибо за ваши комментарии. Это было единственное, что побудило меня расширяться. Я не пробовал другие возможности. На самом деле, я думаю, что если автор вопроса сочтет этот тип сюжета полезным, он должен попробовать все, а затем опубликовать и объяснить результаты для сообщества. Кстати, я не говорю, что этот тип сюжета лучше, чем другие. Дело в том, что он был специально разработан для категориальных переменных и для визуализации независимости и / или нарушения независимости.
ланенок

3

Я предпочитаю использовать мозаичный сюжет

mosaicplot(table(moz), sort = c(3,1,2), color = T)

mosaicplot ()


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

2

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

Вот пример с данными Titanic Survival:

Вот пример с данными выживания Титаника.

В R (учитывая ваши теги) я использовал ggparallel для его реализации. Некоторые люди обсуждали здесь, как резюме, как реализовать его другими способами.


У меня проблемы с представлением этого. Есть ли шанс, что вы сможете сделать пример?
Shadowtalker

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

2

Информация также может быть передана с использованием следующей простой линейной диаграммы:

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.