본문 바로가기
공부공부/2025 쌓아가는 나의 지식~

[데이터 분석] 사용성 평가를 위한 R을 이용한 유의성 검정 [ANOVA, ART ANOVA]

by Lee_story_.. 2025. 7. 6.
728x90

 

데이터 분석을 하다 보면,
두 집단 간 평균 차이가 의미 있는가?
처치 전후 변화가 유의미한가?


차이가 통계적으로 유의한지"를 판단하는 경우가 많습니다.

이런 판단을 위해 가설 검정(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 → 집단 간 유의한 차이 존재한다는것을 확인 할 수 있습니다. 

 


 

여기까지가끝....

제가쓰긴했는데, 좀 많이 모자란것 같네요....

데이터 분석은 생각보다 쉽지 않은 일인것 같습니다. 

그래도 계속해서 공부해보도록 하겠습니다!

 

 


틀린점이 있다면 댓 달아주세요!

 

728x90

댓글