Как визуализировать проценты по сравнению с количеством записей.

10

Я пытаюсь найти лучший способ визуализировать приведенную ниже таблицу и подчеркнуть эффективность лечения в сравнении с количеством пациентов, которые попробовали лечение. Вот ссылка на реальную страницу: http://curetogether.com/cluster-headaches/treatments/

Легенда лечения головной боли кластера Лечение головной боли кластера

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

Спасибо!

Дэвид Хобс
источник
(Пожалуйста, не используйте круговые диаграммы.) Под «подчеркиванием эффективности, в то же время упрощая сравнение процедур», вы имеете в виду тот факт, что, например, трудно понять, является ли caffeineили ibuprofenприводит к более высокой вероятности, moderate improvementпотому что исходные данные отличаются? Или что-то другое?
gung - Восстановить Монику

Ответы:

12

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

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

  • Представьте общую или среднюю эффективность в виде позиции по линейной шкале. Такие позиции легче всего понять визуально и точно прочитать количественно. Сделайте шкалу общей для всех 34 процедур.

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

  • Различают пять категорий эффективности по цвету и / или значению затенения. Поддерживать порядок этих категорий.

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

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

фигура

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

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

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

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

Быстрый и грязный Rкод, который создал этот сюжет, прилагается.

x <- c(0,0,3,5,5,
       0,0,0,0,2,
       0,0,3,2,4,
       0,1,7,9,7,
       0,0,3,2,3,
       0,0,0,0,1,
       0,1,1,1,2,
       0,0,2,2,1,
       0,0,1,0,1,
       0,0,3,2,1,
       0,0,2,0,1,
       1,0,5,5,2,
       1,3,15,15,4,
       1,2,5,7,3,
       0,0,4,4,0,
       0,0,2,2,0,
       0,0,3,0,1,
       0,0,2,2,0,
       0,4,18,19,2,
       0,0,2,1,0,
       3,1,27,25,3,
       1,0,2,2,1,
       0,0,4,2,0,
       0,1,6,5,0,
       0,0,3,1,0,
       3,0,3,7,2,
       0,1,0,1,0,
       0,0,21,4,2,
       0,0,6,1,0,
       1,0,2,0,1,
       2,4,15,8,1,
       1,1,3,1,0,
       0,0,1,0,0,
       0,0,1,0,0)
levels <- c("Made it much worse", "Made it slightly worse", "No effect or uncertain",
            "Moderate improvement", "Major improvement")
treatments <-  c("Oxygen", "Gluten-free diet", "Zomig", "Sumatriptan", "Rizatriptan (Maxalt)",
                 "Dilaudid suppository", "Dilaudid-Morphine", "Verapamil",
                 "Magic mushrooms", "Magnesium", "Psilocybine", "Excedrin Migraine",
                 "Ice packs on neck and head", "Passage of time", "Red Bull", "Lidocaine",
                 "Vitamin B-2 (Roboflavin)", "Caffergot", "Caffeine", "Tobasco in nose / on tongue")
treatments <- c(treatments, 
                 "Ibuprofen", "Topamax", "Excedrin Tension Headache", "Acetaminophen (Tylenol)",
                 "Extra Strength Excedrin", "Hot water bottle", "Eletriptan", 
                 "Headache tracking", "Women to Women vitamins", "Effexor", "Aspirin",
                 "Propanolol", "L-Arginine", "Fioricet")
x <- t(matrix(x, 5, dimnames=list(levels, treatments)))
#
# Precomputation for plotting.
#
n <- dim(x)[1]
m <- dim(x)[2]
d <- as.data.frame(x)
d$Total <- rowSums(d)
d$Effectiveness <- (x %*% c(-2,-1,0,1,2)) / d$Total
d$Root <- (d$Total)
#
# Set up the plot area.
#
colors <- c("#704030", "#d07030", "#d0d0d0", "#60c060", "#387038")
x.left <- 0; x.right <- 6; dx <- x.right - x.left; x.0 <- x.left-4
y.bottom <- 0; y.top <- 10; dy <- y.top - y.bottom
gap <- 0.4
par(mfrow=c(1,1))
plot(c(x.left-1, x.right), c(y.bottom, y.top), type="n", 
     bty="n", xaxt="n", yaxt="n", xlab="", ylab="", asp=(y.top-y.bottom)/(dx+1))
#
# Make the plots.
#
u <- t(apply(x, 1, function(z) c(0, cumsum(z)) / sum(z)))
y <- y.top - dy * c(0, cumsum(d$Root/sum(d$Root) + gap/n)) / (1+gap)

invisible(sapply(1:n, function(i) {
  lines(x=c(x.0+1/4, x.right), y=rep(dy*gap/(2*n)+(y[i]+y[i+1])/2, 2),
        lty=3, col="#e0e0e0")
  sapply(1:m, function(j) {
  mid <- (x.left - (u[i,3] + u[i,4])/2)*dx
  rect(mid + u[i,j]*dx, y[i+1] + (gap/n)*(y.top-y.bottom), 
       mid + u[i,j+1]*dx, y[i], 
       col=colors[j], border=NA)
})}))
abline(v = x.left, col="White")
labels <- mapply(function(s,n) paste0(s, " (", n, ")"), rownames(x), d$Total)
text(x.0, (y[-(n+1)]+y[-1])/2, labels=labels, adj=c(1, 0), cex=0.8,
     col="#505050")
Whuber
источник
Вау, спасибо за невероятно четкий и обстоятельный ответ. Это отличное решение для визуализации всей информации. Созданный вами пример графика действительно помогает понять ответ с первого взгляда, что также было полезно. Спасибо!
Дэвид Хобс
2
(+1) Хорошая визуализация. Следует отметить, что пакеты likert и HH R имеют функции для составных гистограмм, в частности, для шкал Лайкерта. В последнем пакете есть даже возможность изменять высоту каждого стержня в зависимости от размера образца (см. Стр. 12 в этой статье JSS ).
ЧЛ
3

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

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

Дж Ричард Снейп
источник