항목 수와 비교하여 백분율을 시각화하는 방법


10

아래 차트를 시각화하고 치료를 시도한 환자의 수에 따라 치료 효과를 강조하는 가장 좋은 방법을 찾으려고합니다. 실제 페이지에 대한 링크는 다음과 같습니다. http://curetogether.com/cluster-headaches/treatments/

클러스터 두통 치료 범례 군 발성 두통 치료

효과를 강조하면서 치료법을 쉽게 비교하고 각각의 환자 수를 평가하는 가장 좋은 방법은 무엇입니까? 내 생각은 효과를 백분율로 표시하는 것이지만, 여전히 효과를 쉽게 비교하고 각 시도한 환자 수를 보여주는 방법을 잘 모르겠습니다.

감사!


(파이 차트를 사용하지 마십시오.) 에 의해 "를 강조하는 효과를 여전히 쉽게 치료를 비교를하면서"당신은 예를 들어,이 있는지 여부를 확인하기 어렵다는 사실을 언급하는 caffeine또는 ibuprofen리드의 높은 확률로 moderate improvement기준선 때문에 다르다? 또는 다른 것?
gung-모니 티 복원

답변:


12

"효과"를 비교하고 각 치료를보고하는 환자 수를 평가하려고합니다. 효과는 5 개의 개별 순서로 분류되지만 (어떻게 든) "평균"으로 요약됩니다. (평균) 가치는 양적 변수로 생각됩니다.

따라서 이러한 종류의 정보를 전달하기에 적합한 요소를 가진 그래픽을 선택해야합니다. 많은 훌륭한 솔루션 중에서 제안하는 것 중 하나는이 스키마를 사용하는 것입니다.

  • 전체 또는 평균 효과를 선형 스케일을 따라 위치로 나타냅니다. 이러한 위치는 시각적으로 정확하게 파악하고 정량적으로 읽을 수 있습니다. 모든 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")

와, 엄청나게 명확하고 철저한 답변에 감사드립니다. 모든 정보를 시각화하는 훌륭한 솔루션입니다. 생성 한 예제 그래프는 실제로 답변을 한 눈에 파악하는 데 도움이되었으며 도움이되었습니다. 감사!
David Hobs

2
(+1) 멋진 시각화. 특히, likertHH R 패키지에는 특히 Likert 스케일을 대상으로하는 누적 막 대형 차트 기능이 있습니다. 후자의 패키지에서는 각 막대의 높이가 샘플 크기에 따라 달라질 수 있습니다 ( 이 JSS 논문의 12 페이지 참조 ).
chl

3

각 행을 백분율로 확실히 변환하고 모든 막대를 동일한 길이로 플롯 할 수 있습니다. 막대의 비율은 녹색으로 표시되어 효과를 시각적으로 잘 보여줍니다. 결과의 기준이되는 샘플 크기를 나타 내기 위해 숫자를 괄호로 묶을 수 있습니다.

효과뿐만 아니라 샘플 수를 시각적으로 표시하려는 경우 차트를 그대로 고려할 수 있지만 회색 섹션의 중심을 기준으로 막대를 가운데에 맞출 수 있습니다. 그런 다음 막대의 전체 크기는 시각적으로 샘플 크기를 나타내며 중심선의 오른쪽 (또는 왼쪽)에있는 막대의 비율은 효과 (또는 기타)를 나타냅니다. 조합하여, 당신은 가장 먼 곳까지 도달하는 바에서 대중 적이고 평가 된 효과적인 치료를 시각적으로 표시 합니다. 링크 한 페이지에서 사용할 수있는 세 가지 방법 중 하나를 정렬 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.