LG DX DATA SCHOOL

01/08 가설 검정

getfeelingsfrom 2026. 1. 8. 15:13

교차분석  (카이제곱 검정)

두 개 이상의 범주형 변수를 교차표(contingency table)로 정리하여 변수 간 관계를 분석하는 방법

이때 주로 사용되는 통계적 검정이 카이제곱(χ²) 검정

 

카이제곱 검정 

  • 설명 변수가 범주형 변수인 경우에 적용
  • 데이터에서 각 범주에 따른 결과 변수의 분포를 비교하거나
    두 개 이상의 범주형 변수 간에 통계적으로 유의미한 관련성(독립성 여부)이 존재하는지를 검정

 

카이제곱 검정의 유형 ( 특히 명목형일 때 ) 

  • 적합성 검정 => 오차 ㄱㅊ? 
    • 하나의 범주형 변수에 대해 관측된 빈도 분포가 이론적·기대 분포와 일치하는지를 검정함
    • 데이터가 가정한 분포에서 크게 벗어나지 않는지(오차가 허용 가능한 수준인지)를 확인함
  • 독립성 검정 => 독립 ㅇㅇ? 
    • 하나의 모집단이 두 개의 범주형 변수에 의해 분류되었을 때 두 변수가 서로 독립적인지, 또는 관련성이 존재하는지를 검정함
    • 교차분석에서 가장 일반적으로 사용되는 형태임
  • 동질성 검정 (집단 간 분포 동일성 비교)
    • 서로 다른 여러 모집단에서 하나의 범주형 변수에 대한 분포가 동일한지를 검정함
    • 각 집단 간 비율이나 분포의 차이가 존재하는지를 확인함

 

 

 

 

분산분석(ANOVA)에서 F 통계량의 의미 

  • F 통계량은 두 개 이상의 서로 독립적인 집단을 비교할 때 사용하는 통계량임
  • 분산분석에서는 개별 데이터 값 자체를 직접 비교하지 않고, 분산의 비율을 활용함
  • 즉, F는 분산 비율을 이용한 통계량이며, 직접적인 분산값 비교가 아님

 

F 통계량의 구성과 해석

  • F 통계량은 집단 간 분산 / 집단 내 분산의 형태로 정의됨
  • 분자에는 집단 간 분산, 분모에는 집단 내 분산이 위치함
  • 이는 평균 비교 문제를 분산의 관점으로 확장한 방법

 

표본분산과 모수 추정 관점 

 

  • 사용되는 분산은 **표본분산(표본값² 기반)**임
  • 표본분산은 모분산을 추정하는 통계량
  • 분산분석에서 최종적으로 남는 것은 모분산 자체가 아니라 모분산의 비율
  • 따라서 F 통계량은 모분산 비율에 대한 추정값의 성격을 가짐

 

집단 간 분산 VS 집단 내 분산

 

  • 집단 내 분산은 각 집단 내부의 변동성을 의미함
  • 집단 간 분산은 집단 평균들 사이의 변동성을 의미함
  • F 값은 집단 내 분산에 비해 집단 간 분산이 얼마나 큰지를 나타냄

분산분석은 분자에 평균차이, 분모에 개인차이를 두어 개인차 대비 평균차이의 비율을 검정함

 

 

 

 

 

 

 

 

  • F 통계량은 집단 간 분산을 집단 내 분산으로 나눈 비율임
  • 집단 내 분산은 개인들이 가지고 있는 자연스러운 변동성을 의미함
  • 집단 간 분산은 집단 평균들 사이의 차이로부터 발생하는 변동성을 의미함

  • F = 1인 경우
    • F = 1이라는 것은 집단 간 분산과 집단 내 분산이 거의 동일함을 의미함 
    • 집단 평균 간의 차이가
    • 개인 수준에서 발생하는 변동성과 구분될 만큼 크지 않음을 의미함
    •  의미
      • 개인을 구성하는 차이에 대비하여 집단 간의 차이가 크지 않음을 의미함
      • 집단이 가진 차이가 개인이 가진 변동성 수준을 넘어서지 못함을 의미함
      • 집단을 나누었지만 실질적으로 거의 같은 집단처럼 보이는 상황임
      • 집단 구분이 데이터 변동을 설명하는 데 의미 있는 역할을 하지 못함

  • F >1인 경우
    • 집단 간 분산이 집단 내 분산보다 큼
    • 개인 수준의 변동성보다 집단 차이에서 발생하는 변동성이 더 큼
    • 집단이라는 요인이 데이터 차이를 설명하는 데 일정한 영향력을 가짐
    • “개인 차이보다 집단의 힘이 더 강해지고 있다”라고 해석 가능함

 

평균차이와 분포(첨도)의 관계 

 

    • 평균 차이가 존재한다고 해서 반드시 서로 다른 집단이라고 판단할 수는 없음
    • 평균은 분포의 위치만 설명하며, 데이터의 흩어짐과 형태는 반영하지 못함
    • 따라서 평균 차이가 개인 변동성 대비 충분히 의미 있는지를 확인하기 위해 F 검정이 필요함
      • F 검정은 평균 차이를 분산의 비율 관점에서 평가함
      • 평균 차이가 집단 내 개인차(집단 내 분산)를 뚫고 나올 만큼 충분한지를 검정함
      • 단순히 평균이 다르다는 사실이 아니라→ 분포 전체가 다르다고 볼 수 있는지를 판단함
    • 첨도가 높은 경우(뾰족한 분포) 
      • 데이터가 평균 주변에 밀집되어 있음
      • 집단 내 분산이 작아 개인차가 크지 않음
      • 이 경우 평균 차이가 존재하면 → 분포 간 차이가 명확하게 드러남
      • 결과적으로 F 값이 커지고 집단 효과가 뚜렷해짐
      • → 평균 차이가 강한 영향력을 가짐
      • 개인차(집단 내 분산)가 작음
      • 평균 차이가 존재하면 개인차를 뚫고 쉽게 드러남
      • F 값이 커지기 쉬움
    • 첨도가 낮은 경우( 완만한 분포) 
      • 데이터가 넓게 퍼져 있음
      • 집단 내 분산이 커 개인차가 큼
      • 평균 차이가 존재하더라도
        분포가 겹쳐 평균 차이가 거의 티 나지 않음
      • 결과적으로 F 값이 1 근처에 머물 가능성이 큼
      • → 평균 차이가 개인차에 묻혀 의미가 약해짐
      • 개인차(집단 내 분산)가 큼
      • 평균 차이가 있어도 분포에 묻혀 티가 잘 안 남
      • F 값이 1 근처에 머물 가능성이 큼

 

다집단 비교 

 

  • 비교할 집단이 **3개 이상(A, B, C)**인 경우
    → t-검정은 두 집단씩만 비교 가능함
  • 만약 t-검정을 사용한다면
    → A–B, B–C, A–C처럼 여러 번 반복 수행해야 함
    → 이 과정에서 p-value가 누적됨
    → 제1종 오류(거짓 양성) 확률이 증가함
    → 결과적으로 신뢰도가 매우 낮아짐
  • 따라서 다집단 비교에서는 t-검정을 사용하지 않음
  • 대신 한 번의 검정으로 전체 집단 차이를 평가할 수 있는 F 검정을 사용함

 

 

 


 

평균 차이 검정과 F-검정(ANOVA)의 의미 

 

  • 평균 차이에 대한 검정은 F-검정을 사용하여 진행함
  • 이는 평균값 자체를 직접 비교하는 것이 아니라
    → 분산의 크기를 통해 평균 차이가 의미 있는지를 판단함

분포 관점에서의 해석

 

  • 분산이 크다는 것은
    → 집단 간 평균 차이로 인해 발생한 변동성이
    → **개인들이 가지고 있는 자연스러운 변동성(개인차)**에 비해
    → 상대적으로 큰지를 의미함
  • 즉, F-검정은
    → 집단 간 차이가 개인차 대비 충분히 큰지를 평가함

F-검정으로 알 수 있는 것과 알 수 없는 것 

 

  • F-검정 결과를 통해
    → 집단 간 평균 차이가 존재하는지 여부만 판단 가능함
  • 그러나
    → 어떤 집단 사이에서 차이가 발생했는지는 알 수 없음
  • 즉,
    차이의 위치나 방향은 제공하지 않음

 

 

 

 

ANOVA와 F-검정 

 

  • 평균을 비교하는 검정이 분산분석(ANOVA)임
  • 분산분석은 F-통계량을 사용하여 평균 차이를 검정함
  • 따라서 → ANOVA는 F-검정을 기반으로 한 평균 차이 검정 방법임
  • 개념적으로→ “F-검정 안에 ANOVA가 포함되어 있다”라고 이해해도 무방함

 


 

문제 )

 

정답 )

getwd()
setwd("C:\\Users\\user\\Desktop\\Rwork")
df<-read.csv("three_sample.csv",header=TRUE) #원본데이터 
str(df)
summary(df)

data <- subset(df, !is.na(score), c(method, score)) 
#subset :행을 뽑아라 
#두번째 인수 : 조건 
#세번째 인수 : 특정 칼럼 조합으로 출력

plot(data$score) # 산점도 이용 outlier 확인(50이상 발견) #연속형데이터 
boxplot(data$score) # 막대 차트 이용 outlier 확인
mean(data$score) # 평균 통계량 : 8.45

length(data$score) # outlier 제거 전 관측치 91개
data2 <- subset(data, score <= 14) # 14이상 제거
length(data2$score) #88 (3개 제거)

x <- data2$score
boxplot(x) # 박스 차트에서 정제 데이터 확인 (이상치제거 후) -> 이제 f-검정 가능 

#단계 1 : 세 집단 subset 작성
# 코딩 변경 - 변수 리코딩(method: 1:방법1, 2:방법2, 3:방법3)
data2$method2[data2$method==1] <- "방법1" # 조건 만족하는 TF로 반환
data2$method2[data2$method==2] <- "방법2"
data2$method2[data2$method==3] <- "방법3"

str(data2)

table(data2$method2) # 교육방법 별 빈도수
#비율이 맞는지 모르겠으면 카이제곱검정 필요 (통상적 편차 범위 안에 있는지 확인)

#단계 3 : 교육방법을 x변수에 저장
x <- table(data2$method2)

#단계 4 : 교육방법에 따른 시험성적 평균 구하기
y <- tapply(data2$score, data2$method2, mean)
df2 <- data.frame(교육방법=x, 성적=y)
df2

#동질성 검사 H0: 두 집단은 동질하다
bartlett.test(score ~ method, data=data2)

#세 집단이상의 평균 검정(통계적 유의미성 확인 필요) 
help(aov) # 형식) aov(종속변수(결과/ 연속형) ~ 독립변수(원인/ 명목형이어도 ㄱㅊ), data=data set)
result <- aov(score ~ method2, data=data2)
names(result)

summary(result)

TukeyHSD(result) # 분산분석의 결과로 사후검정
#방법2와 방법1의 집단 간 평균의 차(diff) 가 가장 크게 난다.
plot(TukeyHSD(result)) # diff : 폭 크기

 

하나씩 뜯어보자아

 

1. 데이터 불러와서 파악하기

getwd()
setwd("C:\\Users\\user\\Desktop\\Rwork")
df<-read.csv("three_sample.csv",header=TRUE) #원본데이터 
str(df)
summary(df)

 

2. subset함수로 필요한 칼럼만 뽑고, 결측치를 제거한다.

data <- subset(df, !is.na(score), c(method, score))
  • subset :행을 뽑아라
  • 두번째 인수 : 조건
  • 세번째 인수 : 특정 칼럼 조합으로 출력
  • subset(df, 조건, 선택할컬럼) 구조.
  • !is.na(score) : score가 NA가 아닌 행만 남김.
  • c(method, score) : method와 score만 남김.

 

3. 이상치 확인하기 

plot(data$score) # 산점도 이용 outlier 확인(50이상 발견) #연속형데이터 
boxplot(data$score) # 막대 차트 이용 outlier 확인
mean(data$score) # 평균 통계량 : 8.45

plot/ boxplot

 

 

  • plot(data$score) : 인덱스-값 산점도처럼 보여서 큰 값이 튀는지 확인.
  • boxplot(data$score) : IQR 기반 이상치 표시(점으로 튀어나옴).
  • mean(data$score) : 전체 평균 확인(8.45).

 

 

4. 이상치 제거 및 정제 결과 확

length(data$score) # outlier 제거 전 관측치 91개
data2 <- subset(data, score <= 14) # 14이상 제거
length(data2$score) #88 (3개 제거)

 

 

  • 분산분석(ANOVA)은 평균 비교이므로 극단값이 평균/분산을 크게 흔들 수 있음
  • 이상치 제거 후 정규성/등분산성이 더 잘 맞을 가능성이 큼

 

 

5. 박스 차트로 정제된 데이터 결과 확인 

x <- data2$score
boxplot(x) # 박스 차트에서 정제 데이터 확인

 

(이상치제거 후) -> 이제 f-검정 가능

 

 

6. 세 집단 subset 작성하기 -> method를 명목형(라벨)로 리코딩

# 코딩 변경 - 변수 리코딩(method: 1:방법1, 2:방법2, 3:방법3)
data2$method2[data2$method==1] <- "방법1" # 조건 만족하는 TF로 반환
data2$method2[data2$method==2] <- "방법2"
data2$method2[data2$method==3] <- "방법3"

str(data2)

 

 

 

 

  • method가 1/2/3 숫자라면, 해석 가능한 라벨을 붙인 method2 생성.
  • table(data2$method2) : 교육방법별 표본 수 확인

7. 교육방법 별 빈도수 

table(data2$method2) # 교육방법 별 빈도수

비율이 맞는지 모르겠으면 카이제곱검정 필요 (통상적 편차 범위 안에 있는지 확인)

 

8. 교육 방법을 x 변수에 저장 

x <- table(data2$method2)
  • table() : 방법별 관측치 수(표본 크기).

 

9. 교육방법에 따른 시험성적 평균 구하기

y <- tapply(data2$score, data2$method2, mean)
df2 <- data.frame(교육방법=x, 성적=y)
df2

  • tapply(score, group, mean) :
    • group별 mean 계산. 반복적으로 
    • 결과가 table형태로 
    • group단위로 평균을 구해서 표의 형태로 반환 
  • df2로 합쳐서 “표본수 + 평균”을 한 번에 보여줌.
  • ANOVA는 집단 간 평균 차이를 검정하므로, 사전 탐색으로 각 집단 평균이 얼마나 다른지 확인하는 단계.

 

10. 동질성 검사

 bartlett.test(score ~ method, data=data2)

 

 

평균검정하려면 동질성 검사 필수 !

-> 집단별로 분포가 균등하게 되어있는지 확인 (특히anova검정) 

  •  귀무가설(H0): 집단들의 분산이 같다(등분산)
  • 대립가설(H1): 적어도 하나의 집단 분산이 다르다

 

 

  • p-value가 충분히 크면(예: 0.05보다 큼) → 등분산 가정에 “크게 문제 없음”
  • p-value가 작으면 → 등분산 깨짐 → 일반 ANOVA 대신 Welch ANOVA 고려

 

 

11. 세 집단이상의 평균 검정

help(aov) # 형식) aov(종속변수(결과/ 연속형) ~ 독립변수(원인/ 명목형이어도 ㄱㅊ), data=data set)
result <- aov(score ~ method2, data=data2)
names(result)
summary(result)

 

통계적 유의미성 확인 필요하기 때문에 실행 

 형식 : aov(종속변수(결과/ 연속형) ~ 독립변수(원인/ 명목형이어도 ㄱㅊ), data=data set)

 

  • aov(score ~ method2) :
    • 종속변수: score (연속형)
    • 독립변수: method2 (3집단 범주형)
  • summary(result) : ANOVA 테이블 출력
표시 p-value 범위 의미
*** p < 0.001 매우 매우 강한 유의성
** 0.001 ≤ p < 0.01 매우 강한 유의성
* 0.01 ≤ p < 0.05 통계적으로 유의
. 0.05 ≤ p < 0.1 경향성 있음 (보통 유의 X)
없음 p ≥ 0.1 유의하지 않음

 

 

 

12. 분산분석의 결과로 사후검정 

TukeyHSD(result)
plot(TukeyHSD(result)) # diff : 폭 크기
  • TukeyHSD는 모든 쌍(pairwise) 비교를 하되, 다중비교로 인한 1종 오류 증가를 제어
  • 방법2와 방법1의 집단 간 평균의 차(diff) 가 가장 크게 남

세 집단 모두 평균에서의 차이가 있다 

 

그래프 해석

  • 중앙의 수직 점선(0): 두 집단의 평균 차이가 '0'임을 의미합니다= 차이가 없음
  • 수평선(신뢰구간): 두 집단의 평균 차이가 존재할 수 있는 범위
  • 0을 포함하는 경우: 두 집단 사이에 통계적으로 유의미한 차이가 없음
  • 0을 포함하지 않는 경우: 두 집단 사이에 통계적으로 유의미한 차이가 있음
  • 방법2 - 방법1 (맨 위) 신뢰구간이 약 2.0에서 3.3 사이에 형성되어 있으므로,
    ==> 0을 전혀 포함하지 않고 양수 쪽에 치우쳐 있음
    ==> 따라서 방법2가 방법1보다 평균적으로 유의미하게 높다고 결론 내림 가능