Como visualizar porcentagens comparadas com o número de entradas.


10

Estou tentando descobrir a melhor maneira de visualizar o gráfico abaixo e enfatizar a eficácia do tratamento, em oposição ao número de pacientes que tentaram o tratamento. Aqui está o link para a página real: http://curetogether.com/cluster-headaches/treatments/

Legenda do tratamento da dor de cabeça em cluster Tratamentos para dores de cabeça em cluster

Qual é a melhor maneira de enfatizar a eficácia e, ao mesmo tempo, facilitar a comparação de tratamentos e ver quantos pacientes avaliaram cada um? Meu pensamento era mostrar a eficácia em porcentagens, mas não sei como torná-las facilmente comparáveis ​​e mostrar o número de pacientes que experimentaram cada um.

Obrigado!


(Por favor, não use gráficos de setores circulares.) Ao "enfatizar a eficácia e ao mesmo tempo facilitar a comparação de tratamentos", você está se referindo ao fato de que, por exemplo, é difícil ver se isso leva caffeineou não ibuprofena uma maior probabilidade moderate improvementporque as linhas de base diferem? Ou alguma outra coisa?
gung - Restabelece Monica

Respostas:


12

Você deseja comparar a "eficácia" e avaliar o número de pacientes que relatam cada tratamento. A efetividade é registrada em cinco categorias discretas e ordenadas, mas (de alguma forma) também é resumida em "Média". valor (médio), sugerindo que é considerado uma variável quantitativa.

Portanto, devemos escolher um gráfico cujos elementos estejam bem adaptados para transmitir esse tipo de informação. Entre as muitas soluções excelentes que se sugerem, usa-se este esquema:

  • Representar a eficácia total ou média como uma posição em uma escala linear. Tais posições são mais facilmente compreendidas visualmente e com maior precisão de leitura quantitativa. Faça a escala comum para todos os 34 tratamentos.

  • Represente números de pacientes por algum símbolo gráfico que é facilmente visto como diretamente proporcional a esses números. Os retângulos são adequados: eles podem ser posicionados para atender ao requisito anterior e dimensionados na direção ortogonal, de modo que suas alturas e áreas transmitam as informações sobre o número de pacientes.

  • Distinga as cinco categorias de eficácia por um valor de cor e / ou sombreamento. Mantenha a ordem dessas categorias.

Um erro enorme cometido pelo gráfico na pergunta é que os valores visuais mais proeminentes - os comprimentos das barras - retratam as informações sobre o número de pacientes e não as informações sobre a eficácia total. Podemos corrigir isso facilmente, atualizando cada barra sobre um valor médio natural.

Sem fazer outras alterações (como melhorar o esquema de cores, que é excepcionalmente ruim para qualquer pessoa daltônica), aqui está o redesenho.

Figura

Adicionei linhas pontilhadas horizontais para ajudar o olho a conectar etiquetas às plotagens e apaguei uma fina linha vertical para mostrar a localização central comum.

Os padrões e o número de respostas são muito mais evidentes. Em particular, temos basicamente dois gráficos pelo preço de um: no lado esquerdo, podemos ler uma medida de efeitos adversos, enquanto no lado direito, podemos ver quão fortes são os efeitos positivos . Ser capaz de equilibrar o risco, por um lado, e o benefício, por outro, é importante nesta aplicação.

Um efeito casual deste redesenho é que os nomes dos tratamentos com muitas respostas são separados verticalmente dos outros, facilitando a varredura e a visualização dos tratamentos mais populares.

Outro aspecto interessante é que esse gráfico questiona o algoritmo usado para ordenar os tratamentos por "eficácia média": por que, por exemplo, o "Rastreamento de dor de cabeça" é tão baixo quando, entre todos os tratamentos mais populares, foi o único para não ter efeitos adversos?

O Rcódigo rápido e sujo que produziu esse gráfico é anexado.

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

Uau, obrigado pela resposta incrivelmente clara e completa. É uma ótima solução para visualizar todas as informações. O gráfico de exemplo que você produz realmente ajuda a entender rapidamente a resposta, que também foi útil. Obrigado!
quer

2
(+1) Boa visualização. É importante notar que os pacotes likert e HH R possuem funções para gráficos de barras empilhadas visando as escalas Likert, especificamente. No último pacote, existe até a possibilidade de permitir que a altura de cada barra varie de acordo com o tamanho da amostra (consulte a p. 12 neste artigo do JSS ).
chl

3

Você certamente pode transformar cada linha em porcentagens e plotar todas as barras com o mesmo comprimento, com a fração da barra verde, fornecendo um bom indicador visual de eficácia. Você pode reter o número entre colchetes ao lado para indicar em qual tamanho de amostra os resultados se baseiam.

Se você deseja manter um indicador visual do número de amostras e da eficácia, considere o gráfico como está, mas centralize as barras com base no centro da seção cinza. Em seguida, o tamanho geral da barra indicará visualmente o tamanho da amostra e a proporção da barra à direita (ou esquerda) da linha central dará uma indicação de eficácia (ou não). Em conjunto, você obtém uma indicação visual do tratamento eficaz popular e classificado nas barras que atingem a extremidade mais direita. Você pode classificar de uma das três maneiras disponíveis na página que você vinculou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.