iBetter Books
수정

통계 분석 워크플로우 정리

이 책에서 다룬 검정 방법을 흐름도와 치트시트로 정리합니다. 새 데이터를 만났을 때 "어떤 검정을 써야 하지"라는 질문이 생기면 이 챕터를 먼저 펼치세요.

검정 선택 흐름도

분석 목적과 변수 유형에 따라 적절한 검정을 선택하는 흐름입니다.

분석 목적이 무엇인가?
│
├─ 집단 간 평균 비교
│   │
│   ├─ 집단 수: 2개
│   │   ├─ 독립 집단
│   │   │   ├─ 정규성 O, 등분산 O → 독립 t-검정 (t.test, var.equal=TRUE)
│   │   │   ├─ 정규성 O, 등분산 X → Welch t-검정 (t.test, var.equal=FALSE)
│   │   │   └─ 정규성 X           → Wilcoxon 순위합 검정 (wilcox.test)
│   │   └─ 대응 집단 (전후 비교)
│   │       ├─ 정규성 O → 대응 t-검정 (t.test, paired=TRUE)
│   │       └─ 정규성 X → Wilcoxon 부호순위 검정 (wilcox.test, paired=TRUE)
│   │
│   └─ 집단 수: 3개 이상
│       ├─ 정규성 O → 일원 분산분석 (aov)
│       │   └─ 유의미하면 → 사후 검정 (TukeyHSD)
│       └─ 정규성 X → Kruskal-Wallis 검정 (kruskal.test)
│           └─ 유의미하면 → 쌍별 Wilcoxon (pairwise.wilcox.test)
│
├─ 두 변수 간 관계 분석
│   │
│   ├─ 두 변수 모두 연속형
│   │   ├─ 정규성 O → Pearson 상관 (cor.test, method="pearson")
│   │   └─ 정규성 X → Spearman 상관 (cor.test, method="spearman")
│   │
│   ├─ 연속형 → 연속형 예측
│   │   ├─ 예측 변수 1개 → 단순 선형 회귀 (lm)
│   │   └─ 예측 변수 2개 이상 → 다중 선형 회귀 (lm)
│   │
│   └─ 범주형 → 범주형 관계
│       └─ 카이제곱 검정 (chisq.test)
│           └─ 기대빈도 < 5이면 → Fisher 정확 검정 (fisher.test)
│
└─ 이진 결과 예측
    └─ 로지스틱 회귀 (glm, family=binomial)

정규성 검정 가이드

검정 선택 흐름도에서 "정규성 O/X"를 판단하는 방법입니다.

# 정규성 검정 도구 모음

# 1. Shapiro-Wilk 검정 (n < 5000 권장)
shapiro.test(x)
# p > 0.05: 정규분포를 따른다고 볼 수 있음

# 2. Q-Q 플롯으로 시각 확인
qqnorm(x)
qqline(x, col = "red")
# 점들이 직선에 가까울수록 정규분포에 가까움

# 3. 히스토그램 + 정규분포 곡선
hist(x, freq = FALSE, main = "분포 확인")
curve(dnorm(x, mean(x), sd(x)), add = TRUE, col = "red", lwd = 2)

표본이 클 때(n > 30)는 중심극한정리에 의해 평균의 분포가 정규분포에 가까워집니다. 이 경우 경미한 비정규성은 t-검정이나 ANOVA 결과에 큰 영향을 주지 않습니다.

핵심 함수 치트시트

기술통계

목적 함수 패키지
요약 통계 summary(x) base
평균 mean(x, na.rm=TRUE) base
중앙값 median(x, na.rm=TRUE) base
표준편차 sd(x, na.rm=TRUE) base
분산 var(x, na.rm=TRUE) base
사분위수 quantile(x, probs=c(0.25,0.75)) base
빈도표 table(x) base
그룹별 요약 tapply(x, group, mean) base
종합 기술통계 describe(x) psych

정규성 및 동질성 검정

목적 함수 패키지
정규성 (Shapiro-Wilk) shapiro.test(x) base
등분산 (Levene) leveneTest(y ~ group) car
등분산 (Bartlett) bartlett.test(y ~ group) base

평균 비교

목적 함수 패키지
독립 t-검정 t.test(y ~ group, var.equal=TRUE) base
Welch t-검정 t.test(y ~ group, var.equal=FALSE) base
대응 t-검정 t.test(before, after, paired=TRUE) base
Wilcoxon (독립) wilcox.test(y ~ group) base
Wilcoxon (대응) wilcox.test(before, after, paired=TRUE) base
일원 ANOVA aov(y ~ group)summary() base
Tukey 사후 검정 TukeyHSD(aov_result) base
Kruskal-Wallis kruskal.test(y ~ group) base

관계 분석

목적 함수 패키지
Pearson 상관 cor.test(x, y, method="pearson") base
Spearman 상관 cor.test(x, y, method="spearman") base
상관 행렬 cor(df) base
단순/다중 회귀 lm(y ~ x1 + x2) base
분산분석표 anova(lm_result) base
로지스틱 회귀 glm(y ~ x, family=binomial) base

범주형 분석

목적 함수 패키지
카이제곱 검정 chisq.test(table) base
Fisher 정확 검정 fisher.test(table) base
비율 검정 prop.test(x, n) base

신뢰도 및 표본 계획

목적 함수 패키지
Cronbach's α alpha(df) psych
표본 크기 (평균) power.t.test(delta, sd, sig.level, power) base
표본 크기 (비율) power.prop.test(p1, p2, sig.level, power) base

생존 분석

목적 함수 패키지
생존 객체 생성 Surv(time, event) survival
KM 곡선 추정 survfit(Surv ~ group) survival
로그순위 검정 survdiff(Surv ~ group) survival
KM 곡선 시각화 ggsurvplot(km_fit) survminer

공통 분석 파이프라인

분석 유형에 상관없이 공통으로 따르는 절차입니다.

# 1단계: 데이터 파악
str(data)
summary(data)
colSums(is.na(data))

# 2단계: 탐색적 시각화
# — 히스토그램, 박스플롯, 산점도로 분포 확인
# — 이상치, 편향, 클러스터 확인

# 3단계: 가정 검토
# — 정규성: shapiro.test() 또는 Q-Q 플롯
# — 등분산: leveneTest()
# — 독립성: 연구 설계에서 확인

# 4단계: 검정 수행
# — 위 흐름도에 따라 적절한 함수 선택
# — p값, 신뢰구간, 효과크기 함께 보고

# 5단계: 결과 해석
# — 통계적 유의성: p < 0.05 (또는 설정한 α)
# — 실질적 중요성: 효과크기 (Cohen's d, η², Cramer's V 등)
# — 신뢰구간: 0을 포함하는지 여부

# 6단계: 시각화
# — 검정 결과를 그림으로 표현
# — 오차막대, 신뢰구간, 유의성 표시 추가

# 7단계: 보고
# — R Markdown으로 재현 가능한 보고서 작성

오류 해석 주의사항

통계를 처음 배울 때 자주 빠지는 함정 세 가지를 기억해두세요.

첫째, p값이 작다고 효과가 크다는 뜻이 아닙니다. p값은 표본 크기에도 영향을 받습니다. 표본이 수만 명이면 아주 작은 차이도 p < 0.05가 됩니다. 효과크기(Cohen's d, η², Cramer's V 등)를 항상 함께 보고해야 합니다.

둘째, 귀무가설을 기각하지 못했다고 "차이가 없다"는 뜻이 아닙니다. "이 데이터로는 차이를 증명하지 못했다"는 뜻입니다. 표본이 충분히 크지 않았을 수 있습니다.

셋째, 상관관계는 인과관계가 아닙니다. 두 변수가 강하게 상관되어 있어도 하나가 다른 하나의 원인이라는 보장은 없습니다. 인과를 주장하려면 실험 설계나 도구 변수 같은 추가 방법이 필요합니다.