Jak wizualizować wartości procentowe w porównaniu z liczbą wpisów.


10

Staram się znaleźć najlepszy sposób na wizualizację poniższej tabeli i podkreślenie skuteczności leczenia w odniesieniu do liczby pacjentów, którzy próbowali leczenia. Oto link do faktycznej strony: http://curetogether.com/cluster-headaches/treatments/

Cluster Headache Treatment Legend Leczenie klasterowego bólu głowy

Jaki jest najlepszy sposób na podkreślenie skuteczności przy jednoczesnym ułatwieniu porównania leczenia i sprawdzenia, ilu pacjentów oceniało każdego z nich? Myślałem o tym, aby pokazać skuteczność jako wartości procentowe, ale nie jestem pewien, jak nadal sprawiać, by były one łatwo porównywalne i wskazywały liczbę pacjentów, którzy próbowali.

Dzięki!


(Proszę nie używać wykresy kołowe.) Przez „podkreślają skuteczność, a jednocześnie dzięki czemu można łatwo porównać zabiegi”, jesteś odnosząc się do faktu, że, na przykład, trudno, aby zobaczyć, czy caffeinelub ibuprofenprowadzą do wyższego prawdopodobieństwa moderate improvementponieważ linii podstawowych różnić się? Albo coś innego?
gung - Przywróć Monikę

Odpowiedzi:


12

Chcesz porównać „skuteczność” i ocenić liczbę pacjentów zgłaszających każde leczenie. Skuteczność jest rejestrowana w pięciu odrębnych, uporządkowanych kategoriach, ale (jakoś) jest również streszczona w „Śr.” (średnia) wartość, co sugeruje, że uważa się ją za zmienną ilościową.

W związku z tym powinniśmy wybrać grafikę, której elementy są dobrze dostosowane do przekazywania tego rodzaju informacji. Wśród wielu doskonałych rozwiązań, które się sugerują, jeden wykorzystuje ten schemat:

  • Reprezentują całkowitą lub średnią efektywność jako pozycję wzdłuż skali liniowej. Takie pozycje najłatwiej uchwycić wizualnie i dokładnie odczytać ilościowo. Spraw, aby skala była wspólna dla wszystkich 34 zabiegów.

  • Reprezentuj liczby pacjentów za pomocą jakiegoś symbolu graficznego, który jest łatwo zauważalny jako wprost proporcjonalny do tych liczb. Prostokąty są dobrze dopasowane: można je ustawić tak, aby spełniały powyższy wymóg, i zwymiarować w kierunku prostopadłym, aby zarówno ich wysokości, jak i obszary przekazywały informacje o liczbie pacjentów.

  • Rozróżnij pięć kategorii skuteczności według koloru i / lub wartości cieniowania. Utrzymaj porządek tych kategorii.

Ogromnym błędem popełnianym przez grafikę w pytaniu jest to, że najbardziej widoczne wartości wizualne - długości słupków - przedstawiają informacje o liczbie pacjentów, a nie informacje o całkowitej skuteczności. Możemy to łatwo naprawić poprzez wyśrodkowanie każdego słupka o naturalnej wartości średniej.

Bez wprowadzania jakichkolwiek innych zmian (takich jak poprawa schematu kolorów, który jest wyjątkowo słaby dla osób niewidomych kolorów), oto przeprojektowanie.

Postać

Dodałem poziome kropkowane linie, aby oko mogło łączyć etykiety z wykresami, i usunąłem cienką pionową linię, aby pokazać wspólne centralne położenie.

Wzorce i liczba odpowiedzi są znacznie bardziej widoczne. W szczególności otrzymujemy dwie grafiki w cenie jednej: po lewej stronie możemy odczytać miarę negatywnych skutków, natomiast po prawej stronie możemy zobaczyć, jak silne są pozytywne efekty . W tej aplikacji ważna jest umiejętność zrównoważenia ryzyka z jednej strony korzyści, z drugiej strony.

Jednym z nieoczekiwanych efektów tego przeprojektowania jest to, że nazwy zabiegów z wieloma odpowiedziami są pionowo oddzielone od innych, co ułatwia skanowanie i sprawdzenie, które zabiegi są najbardziej popularne.

Innym interesującym aspektem jest to, że ta grafika podważa algorytm używany do zamawiania zabiegów według „średniej skuteczności”: dlaczego na przykład „śledzenie bólu głowy” jest tak niskie, gdy wśród wszystkich najpopularniejszych zabiegów był to jedyny nie mieć żadnych negatywnych skutków?

Dołączono szybki i brudny Rkod, który spowodował ten wątek.

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

Wow, dziękuję za niewiarygodnie jasną i dokładną odpowiedź. To świetne rozwiązanie do wizualizacji wszystkich informacji. Przykładowy wykres, który stworzyłeś, naprawdę pomaga uchwycić odpowiedź na pierwszy rzut oka, co również było pomocne. Dzięki!
David Hobs,

2
(+1) Ładna wizualizacja. Warto zauważyć, że pakiety likert i HH R mają funkcje dla skumulowanych wykresów słupkowych ukierunkowanych konkretnie na skale Likerta. W drugim pakiecie istnieje nawet możliwość zmiany wysokości każdego słupka w zależności od wielkości próbki (patrz str. 12 w tym dokumencie JSS ).
chl

3

Z pewnością możesz zamienić każdy rząd na wartości procentowe i wykreślić wszystkie słupki na tej samej długości, przy czym ułamek paska jest zielony, co daje dobry wizualny wskaźnik skuteczności. Możesz zachować liczbę w nawiasach obok, aby wskazać, na jakiej wielkości próbki opierają się wyniki.

Jeśli chcesz zachować wizualny wskaźnik liczby próbek oraz skuteczności, możesz wziąć pod uwagę tabelę taką, jaka jest, ale wycentrować słupki w oparciu o środek szarej sekcji. Następnie całkowity rozmiar paska pokaże wizualnie wielkość próbki, a proporcja paska, która znajduje się po prawej (lub lewej) linii środkowej, da wskazanie skuteczności (lub w inny sposób). W połączeniu otrzymujesz wizualne wskazanie popularnego i ocenianego skutecznego leczenia z tych prętów, które sięgają najdalej w prawo. Możesz sortować na jeden z trzech sposobów, które są dostępne na połączonej stronie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.