2017-05-03 2 views
0

비율에 대한 오차 막대를 포함하여 문자 벡터의 다른 값에 해당하는 여러 그룹의 관측 비율에 대한 플롯을 작성하려고합니다.R : 오차 막대가있는 문자 변수 비율의 그룹화 된 막대 그래프

내가 가지고있는 데이터의 최소한의 작업 예를 아래에 발견된다 :

# Observations belong to group 'a' or 'b' 
group <- c("a","a","b","b","b","a", "a") 

# Each observation can take on values of "low", "med", or "high" 
values <- c("low","low","low","high","med","high", "high") 

# My data is a single data frame 
dat <- data.frame(as.character(group), as.character(values)) 

우리가 위에서 볼 수 있듯이 : 'A'총 4 명 관찰로 구성되어

  • 그룹 : 2 "낮은"(50 %) 관측 값과 "높은"(50 %) 관측 값.
  • 그룹 'b'는 값이 "낮음"(33 %), 값이 "med"(33 %)가 1 회, 값이 "높음"이 1 회 (33 %) 인 총 3 회의 관측으로 구성됩니다. . I는 X 축 그것의 가능한 값의 각각 (저, 메드 높은)을 '값'벡터 검색된 상기 Y 축이 비율 인 플롯을 작성하는 것을 시도하고

각각. '그룹'벡터의 가능한 각 값과 그룹 구성원이보고 할 수있는 가능한 값 각각에 대해 다른 막대가 표시됩니다. 오류 막대는 이미지에 포함됩니다. 오류 막대로 비율을 계산하는 방법과 ggplot의 그림에 비율을 포함시키는 방법을 찾는 데 어려움이 있습니다.

enter image description here

+0

' ggplot (DAT, AES (값)) + geom_bar (AES (= 기 기입) 위치 = "회피")' – yeedle

+0

이 [SO 질문 ] (http://stackoverflow.com/q/30967643/4752675) 대답을 제공합니다. – G5W

+0

SO 질문은 이미 특정 형식의 데이터가 있으면 대답을 제공합니다. Analysisparalysis는 내 의견에 대한 답변을받은 후 답변으로 확인해 줄 종합적인 답변을 제공했습니다. – user3614648

답변

2

여기 그것에 대해 갈 수있는 방법입니다. 오류 막대는 주어진 그룹의 일부에서만 하나의 관찰이 있기 때문에 사용자가 제시 한 예제 데이터로 인해 실제로 커집니다.


library(dplyr) 
library(ggplot2) 

dat <- data_frame(group, values) %>% 
    count(group, values) %>% 
    group_by(group) %>% 
    mutate(percent = n/sum(n), 
      error = sqrt((percent * (1-percent))/n)) %>% 
    mutate(values = factor(values, levels = c("low", "med", "high"))) 

dat 

#> Source: local data frame [5 x 5] 
#> Groups: group [2] 
#> 
#> group values  n percent  error 
#> <chr> <fctr> <int>  <dbl>  <dbl> 
#> 1  a high  2 0.5000000 0.3535534 
#> 2  a low  2 0.5000000 0.3535534 
#> 3  b high  1 0.3333333 0.4714045 
#> 4  b low  1 0.3333333 0.4714045 
#> 5  b med  1 0.3333333 0.4714045 


ggplot(dat, aes(values, percent, fill = group)) + 
    geom_col(position = "dodge") + 
    geom_errorbar(aes(ymin = percent - error, ymax = percent + error), 
        position = position_dodge(0.9)) 

+1

"mutate (id = row_number())"는 여기서 무엇을합니까? 나머지 코드에서 어디에서 사용되는지는 알 수 없습니다. 또한, 1.96 * sqrt ((백분율 * (1-percent))/n)) 및 0.5/n의 연속성 보정과 같은 일반적인 공식을 권장합니다. – user3614648

+0

아, 그래! 나는 원래 각 가치관이 어떤 관찰인지를 추적 할 필요가 있다고 생각했지만 그때는 그렇지 않았다. 'row_number()'로 행을 편집했습니다. 그리고 네, mutate()에서 에러 바에 대해 원하는 것을 정의 할 수 있습니다. –

+0

group_by (group)는 후속 오류 계산을 위해 n을 각 그룹 내의 n으로 만듭니다. 그게 바람직 한가요? (n = 모든 그룹의 총 관측 수 대신에)? 나는 그것이 원하는 신뢰 구간의 종류에 달려 있다고 생각합니다. – dca

관련 문제