iBetter Books
수정

기술통계량 (평균, 중앙값, 분산, 표준편차)

기술통계(descriptive statistics)는 데이터를 몇 개의 숫자로 요약하는 것입니다. "이 반 학생들의 점수가 어떤가요?" 라는 질문에 150개의 점수를 나열하는 대신, "평균 82점, 표준편차 8점"이라고 대답하는 방식입니다.

중심 경향 — 데이터의 '중간'은 어디인가

평균 (Mean)

가장 직관적인 중심 측도입니다. 모든 값을 더해서 개수로 나눕니다.

scores <- c(72, 85, 90, 78, 95, 88, 62, 91, 84, 77)

mean(scores)   # 82.2

평균의 약점은 극단값(outlier)에 민감하다는 점입니다.

# 극단값이 포함된 경우
incomes <- c(200, 210, 195, 205, 198, 1000)  # 단위: 만원
mean(incomes)     # 334.7 — 1000만원 한 명 때문에 평균이 크게 올라갑니다

# 결측값이 있는 경우
x <- c(72, 85, NA, 78, 95)
mean(x)               # NA
mean(x, na.rm = TRUE) # 82.5

중앙값 (Median)

데이터를 크기 순으로 정렬했을 때 가운데 위치하는 값입니다. 극단값의 영향을 거의 받지 않습니다.

scores <- c(72, 85, 90, 78, 95, 88, 62, 91, 84, 77)
median(scores)   # 86.5 — 정렬 후 5번째(84)와 6번째(88) 평균

incomes <- c(200, 210, 195, 205, 198, 1000)
median(incomes)  # 202.5 — 극단값의 영향을 받지 않습니다
mean(incomes)    # 334.7

평균과 중앙값의 차이가 클수록 데이터가 한쪽으로 치우쳐 있다는 신호입니다. 소득 분포, 부동산 가격처럼 극단값이 많은 데이터에는 중앙값이 더 적합합니다.

최빈값 (Mode)

가장 자주 등장하는 값입니다. R에는 내장 mode() 함수가 없어서 직접 구하거나 별도 패키지를 씁니다.

survey <- c("좋음", "보통", "좋음", "나쁨", "좋음", "보통", "좋음")

# 직접 구하기
table(survey)
# 나쁨 보통 좋음
#    1    2    4  → 최빈값은 "좋음"

# 숫자에서 최빈값
x <- c(1, 2, 2, 3, 3, 3, 4)
as.numeric(names(which.max(table(x))))  # 3

분산과 변동성 — 데이터가 얼마나 흩어져 있는가

두 반의 평균 점수가 모두 80점이어도, 한 반은 모두 80점 근처이고 다른 반은 60점부터 100점까지 고르게 분포할 수 있습니다. 이 '흩어짐'을 측정하는 것이 분산과 표준편차입니다.

분산 (Variance)

각 값이 평균으로부터 얼마나 떨어져 있는지를 제곱해서 평균 낸 값입니다.

scores_a <- c(78, 80, 82, 79, 81)   # 점수가 비슷한 반
scores_b <- c(60, 75, 80, 90, 95)   # 점수 차이가 큰 반

mean(scores_a)  # 80
mean(scores_b)  # 80  — 평균은 같습니다

var(scores_a)   # 2.5   — 분산이 작습니다
var(scores_b)   # 197.5 — 분산이 큽니다

R의 var() 함수는 표본 분산(n-1로 나눔)을 계산합니다. 모집단 분산(n으로 나눔)이 필요하면 직접 계산해야 합니다.

x <- c(78, 80, 82, 79, 81)

# 표본 분산 (R 기본)
var(x)                           # 2.5

# 모집단 분산
sum((x - mean(x))^2) / length(x) # 2.0

표준편차 (Standard Deviation)

분산의 제곱근입니다. 분산은 단위가 제곱이라 해석이 어렵습니다. 표준편차는 원래 데이터와 같은 단위로 돌아옵니다.

scores_a <- c(78, 80, 82, 79, 81)
scores_b <- c(60, 75, 80, 90, 95)

sd(scores_a)  # 1.58 — 평균에서 평균 1.58점 차이
sd(scores_b)  # 14.1 — 평균에서 평균 14.1점 차이

표준편차가 0이면 모든 값이 동일합니다. 표준편차가 클수록 값들이 평균에서 멀리 흩어져 있습니다.

범위와 사분위수

범위 (Range)

최댓값과 최솟값의 차이입니다.

x <- c(72, 85, 90, 78, 95, 88, 62, 91, 84, 77)

range(x)          # 62 95 — 최솟값과 최댓값
diff(range(x))    # 33  — 범위

사분위수 (Quartile)

데이터를 4등분하는 경계값입니다.

x <- c(72, 85, 90, 78, 95, 88, 62, 91, 84, 77)

quantile(x)
# 0%   25%   50%   75%  100%
# 62  77.25  86.5  89.75  95

# 1사분위수 (Q1): 25% 지점 — 전체의 25%가 이 값 이하
# 2사분위수 (Q2): 50% 지점 — 중앙값과 같습니다
# 3사분위수 (Q3): 75% 지점 — 전체의 75%가 이 값 이하

# 특정 분위수만 구하기
quantile(x, 0.25)   # Q1
quantile(x, 0.75)   # Q3
quantile(x, c(0.1, 0.9))  # 10%, 90% 분위수

# IQR (사분위 범위) = Q3 - Q1
IQR(x)  # 12.5

IQR은 데이터의 가운데 50% 범위를 나타냅니다. 극단값의 영향을 받지 않아서 분산의 대안으로 자주 씁니다.

summary() — 한 번에 보기

x <- c(72, 85, 90, 78, 95, 88, 62, 91, 84, 77)

summary(x)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#   62.00   77.25   86.50   82.20   89.75   95.00

# 데이터프레임에 적용하면 모든 열을 한 번에 요약합니다
summary(iris)

그룹별 기술통계

library(dplyr)

iris %>%
  group_by(Species) %>%
  summarise(
    n      = n(),
    mean   = mean(Sepal.Length),
    median = median(Sepal.Length),
    sd     = sd(Sepal.Length),
    min    = min(Sepal.Length),
    max    = max(Sepal.Length),
    IQR    = IQR(Sepal.Length)
  )
Species n mean median sd min max IQR
setosa 50 5.01 5.0 0.35 4.3 5.8 0.4
versicolor 50 5.94 5.9 0.52 4.9 7.0 0.7
virginica 50 6.59 6.5 0.64 4.9 7.9 0.7

변동계수 — 다른 단위의 데이터 비교

표준편차는 단위가 다른 데이터끼리 비교하기 어렵습니다. 변동계수(CV, Coefficient of Variation)는 표준편차를 평균으로 나눠서 백분율로 표현합니다.

# 키(cm)와 몸무게(kg)의 변동성 비교
height <- c(165, 170, 158, 175, 168)
weight <- c(58, 72, 55, 80, 65)

# 표준편차만 보면 단위가 달라 비교가 어렵습니다
sd(height)  # 6.2 cm
sd(weight)  # 9.9 kg

# 변동계수: (표준편차 / 평균) × 100
cv <- function(x) sd(x) / mean(x) * 100

cv(height)  # 3.7% — 상대적으로 변동이 작습니다
cv(weight)  # 15.3% — 상대적으로 변동이 큽니다

변동계수가 크다면 그 변수는 개인차가 크다는 의미입니다.

왜도와 첨도 — 분포의 모양

library(e1071)  # install.packages("e1071")

x <- c(72, 85, 90, 78, 95, 88, 62, 91, 84, 77)

skewness(x)   # 왜도 — 0에 가까울수록 대칭, 양수면 오른쪽 꼬리
kurtosis(x)   # 첨도 — 0이면 정규분포, 양수면 뾰족, 음수면 납작

왜도(skewness)가 양수이면 오른쪽으로 긴 꼬리가 있다는 뜻입니다. 소득 분포가 대표적입니다. 대부분 사람의 소득은 중앙 근처에 몰려 있고, 소수의 고소득자가 오른쪽 꼬리를 만듭니다.

통계량 정리

통계량 함수 측정 대상
평균 mean() 중심 (극단값에 민감)
중앙값 median() 중심 (극단값에 강건)
분산 var() 흩어짐 (단위 제곱)
표준편차 sd() 흩어짐 (원래 단위)
최솟값/최댓값 min(), max() 범위
사분위수 quantile() 분포 위치
IQR IQR() 흩어짐 (극단값에 강건)
요약 summary() 전체 요약

숫자로 데이터를 파악했다면, 이제 시각화로 분포의 모양을 눈으로 확인할 차례입니다.