티스토리 뷰

도수분포표 작성 예제

참고하고 있는 사회조사분석사2급 필기 사회통계 교재의 예제를 바탕으로, R을 활용해 도수분포표 작성 연습을 해 보겠다.

교재는 (주)시대고시기획의 2020년 사회조사분석사2급 필기 사회통계 교재임을 밝힌다.

자료는 학생 40명의 한 달 용돈 지출 금액으로, 단위는 만원이다.

이 자료를 이용해 도수분포표를 작성하는 예제다.

data <- c(33, 8, 11, 22, 12, 9, 8, 33, 32, 30,
          22, 12, 24, 21, 26, 12, 15, 37, 30, 16,
          18, 9, 28, 18, 25, 37, 16, 25, 28, 25,
          16, 24, 31, 25, 28, 26, 15, 12, 35, 38)

1단계 : 범위 구하기

최댓값과 최솟값을 구해, 그 차이인 범위를 확인하자.

max(data); min(data) #최댓값과 최솟값 동시에 보기
## [1] 38
## [1] 8
range(data) #최솟값과 최댓값 동시에 보기
## [1]  8 38
max(data) - min(data)
## [1] 30

범위는 최댓값 38과 최솟값 8의 차이로 계산해 30이 된다.

2단계 : 계급의 수 정하기

다음으로 최솟값과 최댓값을 포함하는 구간을 몇 개의 구간으로 나누기 위해 계급의 개수를 정할 차례다.

(참고 : 통계교육원 - ‘통계학의 이해’ 강의 노트)

통계교육원 강의 노트에서는 계급(구간)의 개수를 정하는 일반적 방법은 없다며, 처음에는 많은 개수의 구간으로 하여 히스토그램을 그려 보고, 모양이 매끄럽지 않다면, 구간의 개수를 줄여나가면서, 매끄러운 히스토그램이 되는 구간의 개수를 선택하라고 조언하고 있다.

한편, 시대고시기획 교재에서는 아래와 같은 방법으로 log를 활용해 계급의 수를 정하는 방법도 활용하니 참고하자.

1 + (log(40, base=10) / log(2, base=10))
## [1] 6.321928
ceiling(1 + (log(40, base=10) / log(2, base=10)))
## [1] 7

1 + (log(40, base=10) / log(2, base=10))의 계산 결과는 약 6.32로 나오는데, 이를 바탕으로 계급의 수 7로 조정한다.

3단계 : 계급의 폭 정하기

앞서 정한 계급의 수 7로 범위 30을 나누면 4.29가 나오는데, 이를 조정한 수 5로 계급의 폭을 정한다.

그렇게 하면 각 계급은 5~9, 10~14, 15~19, 20~24, 25~29, 30~34, 35~39가 된다.

30/7
## [1] 4.285714
ceiling(30/7)
## [1] 5

도수분포표 작성을 위해 data를 범주형 변수로 변환

다소 무식해 보이지만, 아래와 같은 방식으로 data를 변환하겠다.

data_df <- data.frame(data)
class(data_df)
## [1] "data.frame"
data_df_m <- transform(data_df,
                       scope = ifelse(data >= 5 & data <= 9, "5~9",
                                      ifelse(data >= 10 & data <= 14, "10~14",
                                             ifelse(data >= 15 & data <= 19, "15~19",
                                                    ifelse(data >= 20 & data <= 24, "20~24",
                                                           ifelse(data >= 25 & data <= 29, "25~29",
                                                                  ifelse(data >= 30 & data <= 34, "30~34", "35~39")))))))

이 상태 그대로 data_df_m$scope를 확인하면, 원하는 계급 순서로 표가 그려지지 않는다.

table(data_df_m$scope)
## 
## 10~14 15~19 20~24 25~29 30~34 35~39   5~9 
##     5     7     5     9     6     4     4

원하는 순서로 표를 작성하기 위해 data_df_m$scope를 원하는 오름차순의 factor로 변경하자.

data_df_m$scope <- factor(data_df_m$scope, levels=c("5~9", "10~14", "15~19", "20~24", "25~29", "30~34", "35~39"))

이제 table을 작성해 보면, 원하는 순서로 data의 도수 확인이 가능하다.

table(data_df_m$scope)
## 
##   5~9 10~14 15~19 20~24 25~29 30~34 35~39 
##     4     5     7     5     9     6     4
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함