평균, sd, 최소 및 최대로 요약 통계를 플로팅합니까?


10

나는 경제학 배경을 가지고 있으며 일반적으로 학문에서 변수의 요약 통계가 표에보고됩니다. 그러나 나는 그것들을 꾸미고 싶습니다.

평균, 표준 편차, 최소 및 최대를 표시 할 수 있도록 상자 그림을 수정할 수 있었지만 상자 그림이 전통적으로 중앙값과 Q1 및 Q3을 표시하는 데 사용되므로 그렇게하고 싶지 않습니다.

모든 변수의 스케일이 다릅니다. 누군가이 요약 통계를 그릴 수있는 의미있는 방법을 제안 할 수 있다면 좋을 것입니다. R 또는 Stata와 함께 작업 할 수 있습니다.


1
목록에 오신 것을 환영합니다. R명령 에 대해 묻는 다면이 질문은 주제가 아닙니다. 그러나 좋은 음모가 어떻게 생겼는지, 그리고 두 번째로 음모를 만드는 방법에 대해 묻는 것 같습니다. 그렇다면 제목에서 "with R"을 삭제하고 본문에 R사용 가능함을 알리는 것이 좋습니다 .
Peter Flom

답변:


16

Tukey의 boxplot이 보편적 인 이유가 있는데, 가우시안에서 포아송 등 다양한 분포에서 파생 된 데이터에 적용될 수 있습니다. 정상. 그러나 평균과 SD는 특이 치가 많기 때문에 기본 분포와 관련하여 해석해야합니다. 아래 솔루션은 정상 또는 로그 정규 데이터에 더 적합합니다. 여기 에서 강력한 측정 방법을 찾아보고 여기 에서 WRS R 패키지를 탐색 할 수 있습니다 .

# simulating dataset
set.seed(12)
d1 <- rnorm(100, sd=30)
d2 <- rnorm(100, sd=10)
d <- data.frame(value=c(d1,d2), condition=rep(c("A","B"),each=100))

# function to produce summary statistics (mean and +/- sd), as required for ggplot2
data_summary <- function(x) {
   mu <- mean(x)
   sigma1 <- mu-sd(x)
   sigma2 <- mu+sd(x)
   return(c(y=mu,ymin=sigma1,ymax=sigma2))
}

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_crossbar(stat="summary", fun.y=data_summary, fun.ymax=max, fun.ymin=min)

또한 + geom_jitter()또는+ geom_point() 코드를 동시에 미가공 데이터 값을 시각화 위에.


바이올린 음모 를 지적한 @Roland에게 감사합니다 . 요약 통계와 동시에 확률 밀도를 시각화하는 데 이점이 있습니다.

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_violin() + stat_summary(fun.data=data_summary)

아래에 두 가지 예가 모두 나와 있습니다.

여기에 이미지 설명을 입력하십시오


2
나는 이것보다 바이올린 음모를 선호합니다.
Roland

1
분석의 목적에 따라 평균 및 표준 편차가 정확히 필요합니다. 그러나 R의 summary.data.frame의 불일치를 이해하지 못합니다. 의미는 있지만 SD는 표시하지 않습니다. 수단이 유용하지만 표준 편차가 잘못된 여러 상황을 생각할 수 없습니다.
Michael M

실제로, 때때로 당신은 그들이 유용한 지 판단하기 위해 평균과 SD를 볼 필요가 있습니다 ....
Nick Cox

1
@TWL : 주제가 여기에서 논의하기에는 너무 광범위합니다. 그러나 예를 들어 약물에 대한 경제적 평가를 생각해보십시오. 환자의 경우 중간 치료 기간을 아는 것이 중요 할 수 있지만 건강 보험 회사의 경우 평균 치료 기간이 각 환자에 대해 지불해야하기 때문에 평균 치료 기간입니다. 흥미로운 사실 ​​: 지수 분포의 경우 평균 +/- 1 표준 편차는 모든 질량의 68 %, 평균 +/- 2 sds는 모든 질량의 약 95 %를 커버합니다. 정상은. (그러나 그것은 단지 우연이다;)
Michael M

1
고마워요, 제안 된 바이올린 음모가 마음에
드니

9

수많은 가능성이 있습니다.

박스 플롯과 혼동을 피하는 데 사용한 한 가지 옵션은 (중앙값이나 원본 데이터를 사용할 수 있다고 가정) 박스 플롯을 플롯하고 평균을 표시하는 기호를 추가하는 것입니다 (이를 명시 적으로 설명하기 위해 범례를 사용하십시오). 평균에 대한 마커를 추가하는이 박스 플롯 버전은 예를 들어 Frigge et al (1989) [1]에서 언급됩니다.

평균도 표시 한 상자 그림

왼쪽 그림은 + 기호를 평균 마커로 표시하고 오른쪽 그림은 가장자리에 삼각형을 사용하여 Doane & Tracy의 beam-and-fulcrum plot [2]의 평균 마커를 조정합니다.

참조 이 SO 포스트이 일을

중앙값이 없거나 (또는 ​​실제로 표시하고 싶지 않은 경우) 새 그림이 필요하며 상자 그림과 시각적으로 구분되는 것이 좋습니다.

아마도 이런 식으로 뭔가 :

여기에 이미지 설명을 입력하십시오

±

여기에 이미지 설명을 입력하십시오

±

숫자의 척도가 매우 다르지만 모두 양수이면 로그 작업을 고려하거나 다른 (그러나 명확하게 표시된) 척도로 작은 배수를 수행 할 수 있습니다.

코드 (현재 특히 '좋은'코드는 아니지만 아이디어를 탐색하는 중입니다. 좋은 R 코드 작성에 대한 자습서는 아닙니다) :

fivenum.ms=function(x) {r=range(x);m=mean(x);s=sd(x);c(r[1],m-s,m,m+s,r[2])}
eps=.015

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-1.2*eps,fivenum.ms(A)[2],1+1.4*eps,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-1.2*eps,fivenum.ms(B)[2],2+1.4*eps,fivenum.ms(B)[4],lwd=2,col=4,den=0)

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-eps/9,fivenum.ms(A)[2],1+eps/3,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-eps/9,fivenum.ms(B)[2],2+eps/3,fivenum.ms(B)[4],lwd=2,col=4,den=0)

[1] Frigge, M., DC Hoaglin 및 B. Iglewicz (1989),
"상자 그림의 일부 구현"
미국 통계 학자 , 43 (2 월) : 50-54.

[2] Doane DP 및 RL Tracy (2000),
"빔 및 Fulcrum 디스플레이를 사용하여 데이터 탐색"
American Statistician , 54 (4) : 289–290, 11 월

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