데이터 분석을 하다 보면,
두 집단 간 평균 차이가 의미 있는가?
처치 전후 변화가 유의미한가? 등
차이가 통계적으로 유의한지"를 판단하는 경우가 많습니다.
이런 판단을 위해 가설 검정(statistical hypothesis test)을 사용하는데,
그 핵심 조건 중 하나가 바로 데이터의 정규성입니다.
이 내용은 앞선 글에서 소개를 했었습니당
[데이터 분석] 사용성 평가를 위한 Python, R을 이용한 정규성 검정(Normality Test)
이번 프로젝트에서는 어떤 프로그램에 대해서 주관식 설문을 진행했고, 이러한 설문에 대해서 타당성을 확보하기 위해서 각종 데이터 분석기법들을 뒤적뒤적하고 있습니당 그래서 ANOVA나 t-test
ljhyunstory.tistory.com
이번글에서는 정규성 검정을 통한 결과를 통해 유의성 검정에 대한 방법들을 확인해볼 것입니다
그럼 시작!
일단 유의미한가....라는게 뭘까에 대해서부터 생각해보면,
만약 어떤 남성과 여성에 대한 키 데이터를 분석하려고 한다면, 이경우에 지구상 모든 사람들의 키를 잴수 있을까? >> 절대안됨
이러한 경우처럼 우리가 모을수 있는데이터는 전체의 표본이라고 생각해야합니다
그래서 우리는 앞서 해당 데이터가 정규성을 지키는지 >> 전체에 대해서 대표할 수 있는 내용인가! 를 알아보았고,
여기서 한단계 더 해당 데이터를 가지고,
남자와 여자의 키차이가 유의미하게 차이가 나는가! 를 보는것이 이번에 할 유의성 검정 입니다.
유의성 검정은 다음과 같은 순서로 이루어 집니다.
1. 귀무가설(H₀) 설정
우선, 기본 가정을 세웁니다. 이를 귀무가설(null hypothesis, H₀)이라고 합니다.
보통은 "차이가 없다", "효과가 없다", "두 집단이 같다"는 식의 변화 없음을 전제로 합니다.
예: "A와 B 집단의 평균은 같다", "약을 먹기 전과 후의 상태는 같다" 등
2. 대립가설(H₁) 설정
귀무가설에 반대되는 주장, 즉 "차이가 있다", "효과가 있다"라는 가설을 대립가설(alternative hypothesis, H₁)이라고 합니다.
우리가 보통 입증하고자 하는 주장이 여기에 해당됩니다.
3. 검정통계량 계산
그다음, 실제로 수집한 데이터를 바탕으로 검정통계량(test statistic)을 계산합니다.
이는 관찰된 차이를 수치로 표현한 것으로, t-값, F-값, Z-값 등이 여기에 해당됩니다.
4. p-value 계산
계산된 검정통계량을 바탕으로, 귀무가설이 참일 때 지금처럼 극단적인 결과가 나타날 확률을 계산합니다.
이 확률을 p-value(유의확률)라고 합니다.
5. 결론 도출
마지막으로, 이 p-value를 기준으로 결론을 내립니다.
- 만약 p-value가 0.05보다 크면 → 귀무가설을 기각할 수 없습니다 → "차이가 없다"고 판단
- 만약 p-value가 0.05보다 작으면 → 귀무가설을 기각 → "차이가 유의미하다"고 판단
즉, 우연이라 보기 어려울 정도의 차이가 관찰되어야만 통계적으로 유의미하다고 판단할 수 있고,
이경우를 p-value를 가지고 판단할 수 있음
여기까지가 개념 끝!
이러한 유의성 검정 기법들은 다음과 같이 나눌수 있습니다.
더 많은 방법들이 있지만 일단 대표적인 것들!
목적 | 정규성 만족 | 정규성 불만족 | 예시 |
두 집단 평균 비교 | t-test | Mann-Whitney U test | 남학생과 여학생의 수학 점수 평균 차이를 비교할 때 |
세 집단 이상 비교 | ANOVA | Kruskal-Wallis test, ART ANOVA |
세 개 도시(A, B, C) 간 월 평균 소득 차이 비교 |
대응 표본 비교 | paired t-test | Wilcoxon signed-rank test | 같은 사람의 다이어트 전후 체중 변화 비교 |
왜 이렇게 나누냐 하면,
정규성이라는게, 유의성 검정에서 중요할 역할을 하기 때문...
그래서 이를 지키지 않는다면 다음과 같은 문제가 발생할 수 있습니다.
- 검정통계량의 분포가 변함: 예상한 분포(t분포, F분포 등)를 따르지 않음
- Type I 오류율 증가: 실제로는 차이가 없는데 있다고 잘못 판단할 확률 증가
- 검정력 감소: 실제 차이가 있는데 없다고 잘못 판단할 확률 증가
이중에서 이번글에서는 ANOVA와 ART ANOVA에 대해서 알아볼 예정입니다.
두 통계기법들 모두 세 집단 이상 비교를 위해 사용되는 기법들로
ANOVA는 정규성 데이터, ART ANOVA는 모든 데이터에 대한 유의성을 비교할 수 있습니다
일단 ANOVA!
ANOVA는 분산 분석이라고 불리며, 핵심 아이디어는 전체 변동을 두 부분으로 나누는 것입니다.
ANOVA의 원리는 다음과 같습니다.
- 만약 집단 간에 실제 차이가 없다면, 집단 간 변동과 집단 내 변동이 비슷할 것이다.
- 하지만 집단 간에 실제 차이가 있다면, 집단 간 변동이 집단 내 변동보다 훨씬 클 것이다!
ANOVA 코드 예제 (R)
# 데이터 생성: 정규분포를 따르는 3그룹
set.seed(123)
group1 <- rnorm(30, mean = 50, sd = 5)
group2 <- rnorm(30, mean = 55, sd = 5)
group3 <- rnorm(30, mean = 60, sd = 5)
# 데이터프레임 생성
score <- c(group1, group2, group3)
group <- factor(rep(c("A", "B", "C"), each = 30))
df <- data.frame(score, group)
# 정규성 및 등분산성 검정 (선택적)
shapiro.test(df$score)
bartlett.test(score ~ group, data = df)
# ANOVA 수행
anova_result <- aov(score ~ group, data = df)
summary(anova_result)
기본적으로 위의 코드처럼 aov함수를 통해 데이터를 분석할 수 있고,
해당 코드를 통해 실행하면 다음과 같은 결과가 나오게됩니다.
F value: 집단 간 변동 / 집단 내 변동 = 60.0
Pr(>F): p-value < 0.001 → 집단 간 유의한 차이 존재
p-value에 대해서 집단간 유의한 차이를 보인다! 라는걸 분석해볼 수 있습니다.
다음 Art ANOVA!
ART(Aligned Rank Transform) ANOVA는 정규성 데이터와 비정규성 데이터, 모두에 대해서 분석하기 위해 개발된 검정기법으로,
ART ANOVA는 전통적인 비모수 검정(Kruskal-Wallis test)의 한계를 극복하기 위해 개발되었습니다.
- 교호작용 검정 불가: 두 개 이상의 요인이 상호작용하는 효과를 분석할 수 없음
- 복잡한 실험 설계 제한: 반복측정이나 혼합 설계에서 사용 어려움
해당 기법은 비 정규 데이터에서도, ANOVA를 그대로 사용 가능하게 해주는 방법으로 다음과 같이 실행됩니다.
- 데이터를 요인 효과에 따라 정렬(align)
- 각 효과별로 랭크(rank) 처리
- 이 랭크된 값을 기반으로 일반 ANOVA 실행
→ 정규성이나 등분산을 만족하지 않아도 교호작용(Interaction)까지 검정 가능!
ART ANOVA 코드 예제 (R)
# 필요한 패키지 설치 및 로드
install.packages("ARTool")
library(ARTool)
# 비정규 데이터 생성: 지수분포 기반
set.seed(456)
g1 <- rexp(30, rate = 1)
g2 <- rexp(30, rate = 0.8)
g3 <- rexp(30, rate = 0.6)
score <- c(g1, g2, g3)
group <- factor(rep(c("A", "B", "C"), each = 30))
df <- data.frame(score, group)
# ART ANOVA 수행
model_art <- art(score ~ group, data = df)
anova(model_art)
art anova는 art함수를 통해 score를 종속변수, group을 독립변수로 설정하고, ART 변환을 실행한 뒤
anova 함수를 통해 유의성을 검정합니다.
결과는 F = 25.87, p < 0.001 → 집단 간 유의한 차이 존재한다는것을 확인 할 수 있습니다.
여기까지가끝....
제가쓰긴했는데, 좀 많이 모자란것 같네요....
데이터 분석은 생각보다 쉽지 않은 일인것 같습니다.
그래도 계속해서 공부해보도록 하겠습니다!
틀린점이 있다면 댓 달아주세요!

'공부공부 > 2025 쌓아가는 나의 지식~' 카테고리의 다른 글
[React] 웹 사이트 도메인 구매 및 변경 Netlify + Cafe24 설정 가이드 (0) | 2025.07.05 |
---|---|
[React] GitHub → Netlify → 도메인 연결까지, 웹사이트 배포 시작하기 (0) | 2025.07.04 |
[Git] 깃허브 시작 사용법 및 로컬 디렉토리 GitHub에 업로드 + Git Desktop (0) | 2025.07.03 |
[데이터 분석] 사용성 평가를 위한 Python, R을 이용한 정규성 검정(Normality Test) (1) | 2025.07.02 |
R 프로그래밍에 대한 R Studio프로그램 설치 및 사용법 (0) | 2025.07.01 |
댓글