t-test를 배우면 평균 비교가 훨씬 덜 헷갈린다
통계 분석을 처음 시작하면 가장 자주 마주치는 질문이 있습니다.
- 이 집단 평균은 기준값과 다른가?
- 두 집단 평균은 서로 다른가?
- 같은 사람을 전후 비교했을 때 변화가 있는가?
이 질문들에 가장 자주 등장하는 도구가 t-test입니다. 하지만 막상 실제로 쓰려면 금방 헷갈립니다.
- 일표본 t검정과 독립표본 t검정은 어떻게 다른가
- 독립표본 t검정에서도 왜 Welch t-test가 따로 있는가
- paired t-test는 정확히 언제 써야 하는가
- 정규성 가정이 애매하면 바로 Wilcoxon으로 가야 하는가
- 결과표에서 p-value, 신뢰구간, 평균 차이 중 무엇을 먼저 봐야 하는가
이 글은 data/01. t-test(일표본, 독립표본).md, data/02. t-test(대응표본).md, data/14. 비모수 통계분석.md, data/15. 표준편차, 표준오차, 표본오차...md에 정리된 내용을 바탕으로, 초보자도 실제 분석에 바로 적용할 수 있도록 다시 정리한 글입니다.
이 글에서 다루는 범위
| 주제 | 핵심 내용 |
|---|---|
| 일표본 t검정 | 평균이 특정 기준값과 다른지 검정 |
| 독립표본 t검정 | 두 독립집단 평균 비교 |
| Welch t-test | 분산이 같다고 보기 어려운 두 집단 비교 |
| 대응표본 t검정 | 같은 사람 전후 비교, 짝지어진 자료 비교 |
| 비모수 대안 | one-sample Wilcoxon, rank-sum, signed-rank |
| 해석 포인트 | p-value, 평균 차이, 신뢰구간, 설계 구조 |

1. t-test는 어떤 질문에 답하는 검정인가
핵심은 아주 단순합니다. 평균 차이를 보는 검정입니다.
하지만 평균을 비교하는 구조는 세 가지로 나뉩니다.
| 상황 | 대표 검정 |
|---|---|
| 한 집단 평균 vs 기준값 | one-sample t-test |
| 두 독립집단 평균 비교 | two-sample t-test / Welch t-test |
| 같은 대상의 전후 비교 | paired t-test |
즉, t-test는 하나의 검정이 아니라 평균 비교 문제를 푸는 검정 묶음으로 이해하는 편이 맞습니다.
2. t-test를 쓰기 전에 먼저 확인할 것
초보자가 가장 많이 하는 실수는 “일단 t.test()부터 돌리는 것”입니다. 실제로는 아래 순서가 더 중요합니다.
2.1 내 데이터 구조가 무엇인가
먼저 아래 질문을 해야 합니다.
- 집단이 하나인가, 둘인가?
- 둘이라면 서로 독립인가, 같은 사람의 전후값인가?
- 기준값과 비교하는가, 두 집단 평균끼리 비교하는가?
이 구조만 정확히 잡혀도 절반은 끝난 셈입니다.
2.2 정규성은 어떻게 볼까
t-test는 전통적으로 정규성 가정을 전제합니다. 하지만 실무에서는 너무 기계적으로 받아들일 필요는 없습니다.
- 표본 수가 충분히 크면 t-test는 비교적 강건한 편입니다
- 아주 심한 왜도나 이상치가 있으면 비모수 대안도 고려합니다
- 정규성 검정 하나만으로 결정을 끝내지 말고 히스토그램, Q-Q plot, boxplot도 같이 보는 편이 안전합니다
2.3 독립표본일 때는 등분산도 확인할 수 있다
두 독립집단 비교에서는 두 집단 분산이 비슷한지 점검하는 경우가 있습니다.
var.test(weight ~ group, data = sub_pg)다만 현실 데이터에서는 등분산을 장담하기 어렵기 때문에, 최근에는 Welch t-test를 기본 선택지처럼 쓰는 경우가 많습니다.
3. 일표본 t검정: 한 집단 평균이 특정 값과 다른가
언제 쓰는가
- 비교 대상 집단은 하나
- 평균이 어떤 기준값과 다른지 보고 싶음
- 예: 평균 처리시간이 40분과 다른가, 평균 점수가 70점과 다른가
R 코드 예제
x <- c(59.3, 14.2, 32.9, 69.1, 23.1, 79.3, 51.9, 39.2, 41.8)
t.test(x, mu = 40)실제 결과는 대략 다음과 같습니다.
mean of x = 45.64
t = 0.796
p-value = 0.449
95% CI = [29.28, 62.01]
결과를 어떻게 읽어야 하나
- 표본평균은 45.64입니다
- 하지만 p-value가 0.449로 큽니다
- 40이 신뢰구간 안에 포함됩니다
따라서 이번 데이터만으로는 평균이 40과 다르다고 보기 어렵습니다.
여기서 중요한 포인트는 “표본평균이 40보다 커 보인다”와 “통계적으로 다르다고 말할 수 있다”는 다를 수 있다는 점입니다.
4. 일표본 비모수 대안: one-sample Wilcoxon
정규성 가정이 불안하거나 평균보다 중앙값 중심 해석이 더 자연스러우면 Wilcoxon signed-rank test를 고려할 수 있습니다.
x <- c(59.3, 14.2, 32.9, 69.1, 23.1, 79.3, 51.9, 39.2, 41.8)
wilcox.test(x, mu = 40, exact = FALSE)실제 결과:
p-value = 0.477
이 예제에서는 t-test와 비슷하게 “기준값 40과 다르다고 보기 어렵다”는 결론으로 이어집니다.
언제 고려하면 좋나
- 데이터가 심하게 비대칭적일 때
- 표본 수가 작고 이상치 영향이 걱정될 때
- 평균보다 중앙값 차이가 더 중요한 해석일 때
5. 독립표본 t검정: 서로 다른 두 집단 평균 비교
언제 쓰는가
- 두 집단이 서로 독립
- 예: A그룹 vs B그룹, 대조군 vs 실험군, 남성 vs 여성
PlantGrowth 데이터에서 ctrl과 trt1을 비교해 보겠습니다.
data(PlantGrowth)
sub_pg <- subset(PlantGrowth, group %in% c("ctrl", "trt1"))
t.test(weight ~ group, data = sub_pg, var.equal = TRUE)결과는 대략 다음과 같습니다.
mean(ctrl) = 5.032
mean(trt1) = 4.661
t = 1.191
p-value = 0.249
95% CI = [-0.283, 1.025]
해석
- 대조군 평균이 조금 더 큽니다
- 하지만 p-value가 0.249이므로 차이가 유의하다고 보기 어렵습니다
- 평균 차이의 신뢰구간도 0을 포함합니다
즉, “눈으로 보기에 차이가 있는 것 같다”는 것과 “통계적으로 차이가 있다”는 것은 다를 수 있습니다.
6. Welch t-test: 분산이 같다고 장담하기 어려울 때
왜 Welch t-test가 중요한가
전통적인 독립표본 t검정은 두 집단 분산이 같다고 가정합니다. 하지만 현실에서는 그 가정을 자신 있게 두기 어렵습니다. 그래서 t.test()의 기본값도 사실상 Welch 방식입니다.
t.test(weight ~ group, data = sub_pg)실제 결과:
mean(ctrl) = 5.032
mean(trt1) = 4.661
p-value = 0.250
95% CI = [-0.288, 1.030]
왜 결과가 비슷한가
이 예제에서는 분산 차이가 크지 않기 때문입니다. 실제로 F-test를 보면 다음 정도입니다.
var.test(weight ~ group, data = sub_pg)F = 0.540
p-value = 0.372
이 경우 등분산 가정을 크게 의심할 근거가 약하므로, equal variance t-test와 Welch t-test 결과가 거의 비슷하게 나옵니다.
실무에서는 무엇을 기본으로 할까
보수적으로 보면 다음처럼 정리할 수 있습니다.
- 분산이 같다고 확신하기 어렵다 -> Welch t-test
- 실험 설계상 분산 동질성이 충분히 타당하다 -> equal variance t-test 고려 가능
실무에서는 Welch를 기본값처럼 써도 무리가 적습니다.
7. 독립표본의 비모수 대안: Wilcoxon rank-sum test
정규성 가정이 불안하거나 이상치 영향이 크다면 Wilcoxon rank-sum test를 고려할 수 있습니다.
wilcox.test(weight ~ group, data = sub_pg, exact = FALSE)실제 결과:
p-value = 0.199
이 결과도 두 집단 차이를 유의하다고 말할 정도는 아닙니다.
t-test와 Wilcoxon은 무엇이 다른가
- t-test는 평균 차이를 본다
- Wilcoxon rank-sum은 순위 기반 차이를 본다
즉, 같은 “두 집단 비교”라도 질문의 초점이 완전히 동일한 것은 아닙니다.
8. 대응표본 t검정: 같은 대상을 두 번 측정했을 때
언제 쓰는가
- 같은 사람을 전후 측정
- 같은 피험자를 서로 다른 조건에 노출
- 짝지어진 쌍을 비교
대표 예제로 sleep 데이터셋을 보겠습니다.
data(sleep)
wide <- reshape(sleep, idvar = "ID", timevar = "group", direction = "wide")
t.test(wide$extra.2, wide$extra.1, paired = TRUE)실제 결과:
mean difference = 1.58
t = 4.062
p-value = 0.0028
95% CI = [0.70, 2.46]
어떻게 해석하나
- 두 번째 조건의 값이 평균적으로 1.58 더 큽니다
- p-value가 0.01보다 작습니다
- 신뢰구간도 0을 포함하지 않습니다
즉, 대응 구조를 고려하면 두 조건 차이가 유의하다고 볼 수 있습니다.
왜 paired가 중요한가
같은 사람을 전후 비교하는 자료를 독립표본처럼 처리하면 설계 정보를 버리게 됩니다. paired t-test는 각 사람의 변화량을 직접 보는 방식이라 더 정확한 구조에 맞습니다.
9. 대응표본의 비모수 대안: Wilcoxon signed-rank test
wilcox.test(wide$extra.2, wide$extra.1, paired = TRUE, exact = FALSE)실제 결과:
p-value = 0.0091
paired t-test와 마찬가지로 유의합니다. 전후 비교 자료에서 정규성 가정이 꺼림칙하면 좋은 대안이 됩니다.
10. t-test 결과표에서 무엇을 먼저 봐야 하나
초보자는 p-value만 보는 경우가 많지만, 실제로는 아래 순서가 더 좋습니다.
10.1 평균 또는 평균 차이
먼저 차이의 방향과 크기를 확인합니다.
- 어느 집단이 더 큰가
- 차이가 실무적으로 의미 있는 크기인가
10.2 신뢰구간
신뢰구간은 추정의 불확실성을 보여 줍니다.
- 0을 포함하는가
- 구간 폭이 너무 넓지는 않은가
10.3 p-value
마지막으로 “우연으로 보기 어려운가”를 봅니다.
이 순서를 기억하면 “유의함/유의하지 않음”이라는 이분법에 덜 갇히게 됩니다.
11. t-test를 고르는 빠른 체크리스트
| 질문 | 선택 |
|---|---|
| 한 집단 평균 vs 기준값 | one-sample t-test |
| 두 집단, 서로 독립 | Welch t-test 또는 two-sample t-test |
| 두 집단, 같은 대상 전후 비교 | paired t-test |
| 정규성/이상치가 걱정됨 | Wilcoxon 대안 검토 |
추가로 독립표본이라면:
- 분산이 비슷한가?
- 표본 수 차이가 큰가?
이 두 가지를 같이 보면 좋습니다.
12. 초보자가 자주 하는 실수
12.1 paired 자료를 독립표본처럼 분석한다
전후 비교나 동일 피험자 반복 측정 자료는 paired 검정이 맞습니다.
12.2 p-value만 보고 효과 크기를 보지 않는다
표본 수가 크면 아주 작은 차이도 유의할 수 있습니다. 반대로 차이가 꽤 커 보여도 표본 수가 적으면 유의하지 않을 수 있습니다.
12.3 정규성 검정을 만능 필터처럼 쓴다
정규성 검정은 보조도구입니다. 히스토그램, boxplot, Q-Q plot, 설계 구조를 같이 봐야 합니다.
12.4 두 독립집단인데 무조건 var.equal = TRUE를 넣는다
등분산을 자동으로 가정해 버리면 불필요하게 강한 전제를 두게 됩니다. 확신이 없으면 Welch를 기본 선택으로 두는 편이 더 안전합니다.
13. FAQ
t-test와 z-test는 무엇이 다른가요
실무 데이터 분석에서는 모집단 분산을 정확히 아는 경우가 거의 없기 때문에 보통 t-test를 더 자주 씁니다.
p-value가 0.06이면 완전히 실패한 건가요
그렇게 볼 필요는 없습니다. 증거가 약하다는 뜻이지, 차이가 절대 없다는 뜻은 아닙니다. 표본 수, 신뢰구간, 효과 크기를 함께 봐야 합니다.
독립표본 비교에서는 언제 Wilcoxon을 쓰면 되나요
데이터 분포가 심하게 비대칭이거나 이상치 영향이 크고, 평균보다 순위 기반 비교가 더 자연스러울 때 고려할 수 있습니다.
14. 마무리
t-test는 통계 초보자가 가장 먼저 배우는 검정이지만, 동시에 설계 구조를 가장 정확히 구분해야 하는 검정이기도 합니다. 실제로 중요한 것은 공식보다 아래 질문입니다.
- 집단이 하나인가 둘인가
- 두 집단이 독립인가 대응인가
- 평균 차이를 볼 것인가, 비모수 대안을 쓸 것인가
이 구조만 정확히 잡히면 t.test()는 훨씬 덜 어렵습니다. 반대로 이 구조를 놓치면 p-value를 아무리 열심히 봐도 잘못된 결론에 갈 수 있습니다.
공식 문서 및 참고 링크
t-test는 자주 쓰는 만큼 함수 문서를 정확히 읽어 두는 편이 좋습니다. 특히 paired, var.equal, alternative, conf.level 같은 인수는 작은 차이로 해석이 달라질 수 있습니다.
- R
t.test()공식 문서: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/t.test.html - R
wilcox.test()공식 문서: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/wilcox.test.html - R
var.test()공식 문서: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/var.test.html