이 절에서는 데이터의 가장 기본적인 특징을 알려주는 기초 통계량을 계산하는 방법을 알아본다. 이 절에서 설명할 통계량은 표본 평균, 분산, 표준 편차, 다섯 수치 요약, 최빈값 등이다.
표본 평균, 표본 분산, 표본 표준 편차
표본 평균, 표본 분산, 표본 표준 편차는 표본 X1, X2, …, Xn의 n개 표본이 있을 때 다음과 같이 계산한다. 수식은 책의 표 7-3을 참고하기 바란다.
분산의 계산에서 분모에 n이 아니라 n-1을 사용하고 있다는 점에 유의하기 바란다. R에서 기본적으로 계산하는 분산과 표준 편차는 전체 데이터 중 일부를 샘플로 추출한 뒤 이에 대해 분산과 표준 편차를 계산하는 표본 분산과 표본 분산과 표본 표준 편차다. 따라서 n-1을 분모로 사용한다. 아래에 평균, 표본 분산, 표본 표준 편차 계산 함수를 보였다.
-mean : 평균을 계산한다.
mean(
x,
#trim은 데이터를 크기 순서로 나열한 뒤 값이 작은 쪽과 큰 쪽에서 얼마만큼의 데이터를
#제거한 다음 평균을 계산할지를 (0,0.5) 사이의 값으로 지정한다. 이렇게 계산한 평균을
#절사평균(Trimmed Mean)이라고 한다.
trim=0,
na.rm=FALSE, # 평균 계산 전 NA를 제거할 지 여부
...
)
-var : 표본 분산을 계산한다.
var(
x,
na.rm=FALSE,
)
-sd : 표본 표준 편차를 계산한다.
sd(
x,
na.rm=FALSE,
)
다음은 c(1,2,3,4,5)의 평균, 표본 분산, 표본 표준 편차를 계산한 예다.
>mean(1:5) [1] 3 >var(1:5) [1]2.5 >sum((1:5-mean(1:5))^2)/(5-1) #분모로 n-1이 사용됨을 확인할 수 있음 [1]2.5 >sd(1:5) [1] 1.581139 |
다섯 수치 요약
다섯 수치 요약(number summary)은 데이터를 최솟값, 제1사분위수, 중앙값, 제3사분위수, 최댓값으로 요약한다. 다섯 수치 요약을 구하는 함수는 fivenum()이다. summary()는 fivenum()과 유사하지만 다섯 수치 요약에 더해 평균까지 계산해준다.
-fivenum : 다섯 수치 요약을 구한다.
fivenum(
x, #숫자 벡터
na.rm=TRUE
)
다음은 c(1,2,3,...,11)의 다섯 수치 요약을 계산한 결과다. 최솟값이 1, 최댓값이 11, 중앙값이 6, 제1사분위수와 제 3사분위소가 각각 3.5, 8.5임을 알 수 있다. summary()는 이에 더해 추가로 평균(Mean)을 출력한다.
>fivenum(1:11) [1] 1.0 3.5 6.0 8.5 11.0 >summary(1:11) Min. 1st Qu. Median Mean 3rd Qu. Max 1.0 3.5 6.0 6.0 8.5 11.0 |
fivenum()과 summary()는 데이터의 크기가 홀수일 경우에는 위의 예처럼 동일한 결과를 보이지만, 짝수일 때는 다소 다른 결과를 출력한다. 다음은 c(1, 2, 3, 4)에 대한 다섯 수치 요약과 summary()의 출력 결과를 비교한 예다. 제1사분위수와 제3사분위수가 fivenum()에서는 1.5, 3.5인 반면에 summary()에서는 1.75, 3.25로 서로 다르다.
>fivenum(1:4) [1] 1.0 1.5 2.5 3.5 4.0 >summary(1:4) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 1.75 2.50 2.50 3.25 4.00 |
fivenum()이 제1사분위수와 제3사분위수를 찾는 방법은 다음과 같다. 먼저 1, 2, 3, 4에서 중앙값 2.5를 찾는다. 제1사분위수 계산을 위해 중앙값 이하의 좌측 데이터를 찾는다. 그러면 1, 2를 찾을 수 있다. 제1사분위수는 이들의 중앙값인 1.5가 된다. 마찬가지로 제3사분위수는 중앙값 이상의 데이터 3, 4로부터 중앙값을 찾는다. 이 값은 3.5다. 이렇게 계산한 제1사분위수를 lower hinge, 제3사분위수를 upper hinge라고 한다. 이 방식이 책의 "상자 그림(boxplot)" 절에서 설명한 상자 그림에서 사용하는 방법이다.
반면 summary()는 이와 다른 다소 복잡한 방법을 사용해 제1사분위수와 제3사분위수를 추정한다. 자세한 내용은 quantile() 함수 매뉴얼[2]을 참고하기 바란다.
최빈값
최빈값mode은 데이터에서 가장 자주 나타난 값을 말한다. 최빈값은 table()을 사용해 각 데이터가 출현한 횟수를 센 분할표Contingency Table를 만들고, which.max()를 사용해 최대 빈도가 저장된 색인을 찾는 방법으로 구할 수 있다. 이 두 함수에 대해 살펴보자.
-table : 분할표를 작성한다.
table(
... # 팩터로 해석할 수 있는 하나 이상의 객체
)
-which.max : 최댓값이 저장된 위치의 색인을 반환한다.
which.max(
x # 숫자 벡터
)
다음 코드는 문자열 벡터 c(“a”, “b”, “c”, “c”, “c”, “d”, “d”)로부터 가장 자주 출현한 문자열 “c”를 찾는 예다. 최빈값 자체를 구할 때는 names()를 사용해 분할표에서 각 셀의 이름을 구한 다음, 최댓값이 저장된 셀을 선택했다.
>(x <- factor(c("a", "b", "c", "c", "c", "d", "d"))) [1] a b c c c d d Levels: a b c d > table(x) # 팩터의 각 레벨(level)별 빈도수를 구한다. x a b c d 1 1 3 2 > which.max(table(x)) # 가장 큰 값이 저장된 셀의 색인은 3 c 3 > names(table(x))[3] # 가장 큰 값이 저장된 셀의 이름 [1] "c" |
R을 이용한 데이터 처리&분석 실무 中
'R > R을 이용한 데이터 처리&분석 실무' 카테고리의 다른 글
분할표 (0) | 2020.02.05 |
---|---|
표본 추출 (0) | 2020.02.05 |
난수 생성 및 분포 함수 (0) | 2020.02.04 |
코드 수행 시간 측정 (0) | 2020.02.03 |
데이터 구조의 변형과 요약 (0) | 2020.02.03 |