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


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")

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

2
(+1) Хорошая визуализация. Следует отметить, что пакеты likert и HH R имеют функции для составных гистограмм, в частности, для шкал Лайкерта. В последнем пакете есть даже возможность изменять высоту каждого стержня в зависимости от размера образца (см. Стр. 12 в этой статье JSS ).
ЧЛ

3

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

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

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