권세혁HOME
  • 강의노트
    • 기초수학·수리통계·조사방법
    • 기초통계·회귀·다변량분석
    • 머신러닝·딥러닝
    • AI·감성분석
  • 통계상담
  • 임업통계_인사이트
  • 놀이터_플랫폼
  • 통계이야기
  1. 【기초통계】
  2. 📄 교차표 분석
  • 【기초통계】
    • 📄 통계학의 개념
    • 📄 데이터와 통계
    • 📄 일변량 분석
    • 📄 교차표 분석
    • 📄 적합성 검정
    • 📄 정규성 검정
    • 📄 상관분석
    • 📄 분산분석(ANOVA)
    • 📄 시계열 분석
  • 【회귀분석】
    • 📄 개념·추정
    • 📄 변수선택
    • 📄 다중공선성
    • 📄 회귀진단
    • 📄 로지스틱회귀=예측분류
  • 【다변량분석】
    • 📄 다변량분석 개요
    • 📄 PCA주성분분석
    • 📄 FA요인분석
    • 📄 판별분석=예측분류
    • 📄 군집분석
    • 📄 다차원척도·대응분석
    • 📄 정준상관·MANOVA

목차

  • 1 교차표 개념
    • 1.1 교차표란?
      • 1.1.1 개념
      • 1.1.2 이차원 교차표 맛보기
    • 1.2 2x2 분할표
      • 1.2.1 모비율 차이 검정
      • 1.2.2 비율 차이 검정 순서
      • 1.2.3 상대위험도 relative risk와 승산비 odds ratio
  • 2 교차표 검정
    • 2.1 개념
    • 2.2 독립성 검정
    • 2.3 동질성 검정
    • 2.4 Fisher’s 정확검정 exact test
  1. 【기초통계】
  2. 📄 교차표 분석

기초통계 | 4. 교차표 검정

Author

권세혁

1 교차표 개념

정의

교차표(Cross Tabulation)는 두 개의 범주형 변수 간의 관계를 행과 열로 정리한 분할표로, 두 변수 간 연관성을 파악하는 데 사용된다.

1.1 교차표란?

1.1.1 개념

변수 간의 관계를 분석할 때는 먼저 예측변수(X)와 목표변수(Y)가 어떤 속성을 가지는지 확인해야 한다. 변수 속성은 크게 범주형(categorical)과 측정형(numerical)으로 나눌 수 있으며, 두 변수의 조합에 따라 적절한 분석 방법이 달라진다.

변수 유형별 분석 방법
X  Y 범주형 측정형
범주형 교차분석 (카이제곱 검정) 분산분석 (ANOVA), t-검정
측정형 로지스틱 회귀분석 상관분석, 회귀분석
  • X와 Y 모두 범주형: 교차표 작성 후 카이제곱 검정으로 연관성 검토
  • X가 범주형, Y가 측정형: 범주별 Y 평균 비교 (ANOVA, t-검정)
  • X가 측정형, Y가 범주형: 로지스틱 회귀분석 또는 판별분석
  • X와 Y 모두 측정형: 상관분석 또는 회귀분석

1.1.2 이차원 교차표 맛보기

하나의 범주형 자료에 정리 방법으로 사용되는 것이 빈도표(혹은 다양한 차트)를 작성하는 것이다. 예를 들어 대학생 120명에 대한 정치성향에 대한 조사 결과 다음 표를 얻었다.

정치성향 빈도표
지지정당 보수 진보 중도
빈도(비율) 40(33.3%) 30(25%) 50(41.7%)

동일 학생 120명들에 대해 “AI 규제 법안” 지지여부를 물어 아래 결과를 얻었다.

AI 규제 법안 빈도표
AI 규제 법안 지지 반대
빈도(비율) 80(66.7%) 40(33.3%)

두 범주형 변수간의 연관성을 알아보기 위해 한 범주형 변수에 대한 빈도표는 열로, 다른 범주형 변수에 대한 빈도표는 행으로 하여 교차표를 작성하게 되는데 이를 이차원 분할표이라 한다. 일반적으로 영향을 미친다고 생각되는 변수(예측변수 \(X\))를 행으로, 영향을 받는다고 생각되는 변수(목표변수 \(Y\))를 열로 하여 교차표를 작성하면 된다.

위의 예제에서 정치성향에 따른 AI 규제 법안 지지 여부 차이가 있는지 알아보기 위하여 분할표를 작성하여 보자.

정치성향 × AI 규제 법안 교차표
정치성향  AI 규제 법안 지지 반대 합계
보수 30(75%) 10(25%) 40
진보 10(33.3%) 20(66.7%) 30
중도 40(80%) 10(20%) 50
합계 80 40 120

괄호 안에 표시된 비율은 행 비율로 정치성향별 AI 규제 법안 지지여부의 차이를 알 수 있다. 보수와 중도는 AI 규제 법안 지지도가 높고 진보는 반대 비율이 높음을 알 수 있다.

1.2 2x2 분할표

1.2.1 모비율 차이 검정

두 개의 범주형 변수가 각각 2개의 범주만을 가지는 경우, 이들의 관계는 2×2 교차표를 통해 요약할 수 있다.

특히 변수의 수준이 각각 성공과 실패로 이분되는 경우, 이를 확률적으로 모델링할 수 있다. 어떤 사건이 발생할 확률을 \(p\)라고 하면, 그 사건이 발생하지 않을 확률은 \(1 - p\)이다.

  • \(X = \text{집단 1}\): 성공 확률 \(= \pi_{1}\), 실패 확률 \(= 1 - \pi_{1}\)
  • \(Y = \text{집단 2}\): 성공 확률 \(= \pi_{2}\), 실패 확률 \(= 1 - \pi_{2}\)
2×2 분할표 구조
X  Y 범주1 범주2
범주1 \(\pi_{1}\) \(1 - \pi_{1}\)
범주2 \(\pi_{2}\) \(1 - \pi_{2}\)

\(2 \times 2\) 분할표에서는 “두 범주형 변수가 서로 독립이다” \(\Leftrightarrow\) \(\pi_{1} = \pi_{2}\)와 동일하다. 방사능 물질에 노출여부에 따른 건강의 차이가 있는지 알아보기 위하여 주민 1,000명을 임의추출하여 방사능 물질에 노출된 400명, 그렇지 않은 600명을 대상으로 건강 여부를 조사한 자료이다.

방사능 노출 여부 × 질병 여부 교차표
노출여부  질병여부 질병 건강
노출 20 380
미노출 6 594
  • 방사능 노출 집단 질병 발생률 추정치: \({\widehat{\pi}}_{1} = p_{1} = \frac{20}{400} = 0.05\)
  • 방사능 미노출 집단 질병 발생률 추정치: \({\widehat{\pi}}_{2} = p_{2} = \frac{6}{600} = 0.01\)

1.2.2 비율 차이 검정 순서

  • 귀무가설: \(\pi_{1} = \pi_{2}\) 방사능 노출집단과 미노출 집단 질병 발생율은 동일하다.
  • 대립가설: \(\pi_{1} \neq \pi_{2}\) 방사능 노출집단과 미노출 집단 질병 발생율은 다르다.
  • 검정통계량: \(TS = \frac{{\widehat{p}}_{1} - {\widehat{p}}_{2} - 0}{s({\widehat{p}}_{1} - {\widehat{p}}_{2})} \sim z\)

\[s({\widehat{p}}_{1} - {\widehat{p}}_{2}) = \sqrt{\frac{p_{0}(1 - p_{0})}{n_{1}} + \frac{p_{0}(1 - p_{0})}{n_{2}}}\]

  • 통합 비율(pooled proportion): \(p_{0} = \frac{x + y}{n_{1} + n_{2}} = 26/1000 = 0.026\)
#독립인 두 모집단 비율 차이 검정
from statsmodels.stats.proportion import proportions_ztest
import numpy as np
count=[20,6]
nobs=[400,600]
np.array(count)/np.array(nobs),proportions_ztest(count,nobs)

(array([0.05, 0.01]), (3.894, 9.85912e-05))

검정통계량은 3.89이며, 이에 대응하는 유의확률(p-value)은 0.001 미만으로 나타났다. 따라서 유의수준 0.05에서 귀무가설은 기각된다. 방사능 노출 집단의 질병 발생률은 5%로, 미노출 집단의 발생률인 1%에 비해 통계적으로 유의미하게 높았다.

1.2.3 상대위험도 relative risk와 승산비 odds ratio

역학 연구에서 질병의 발생과 특정 위험요인 간의 관련성을 평가하기 위해 사용되는 지표로는 상대위험도와 승산비가 있다.

상대위험도(RR) vs. 오즈비(OR) 비교
구분 상대위험도 (RR) 오즈비 (OR)
정의 발생률의 비율 \(P_1/P_2\) 오즈의 비율
적용 연구 전향적 연구 (코호트) 후향적 연구 (사례-대조군)
직관성 높음 (발생 비율) 낮음 (오즈 비율)
희귀 질환 RR ≈ OR RR ≈ OR
흔한 질환 RR과 OR 차이 큼 OR이 RR을 과대추정

상대위험도 정의: 두 집단 간 비율의 차이가 동일하더라도, 그 해석은 비율의 절대적 크기에 따라 달라질 수 있다. 비율의 절대 차이가 아닌, 비율 간의 상대적 크기를 비교하는 개념이 바로 상대위험도이다.

\[\text{Relative Risk (RR)} = \frac{P_{1}}{P_{2}}\]

  • \(P_{1}\)은 위험요인에 노출된 집단에서의 사건 발생률
  • \(P_{2}\)는 위험요인에 노출되지 않은 집단에서의 사건 발생률
상대위험도(RR) 해석 기준
RR 값 의미 해석
RR = 1 두 집단 발생률 동일 연관성 없음
RR > 1 노출 집단 위험 더 큼 위험 요인
RR < 1 노출 집단 위험 더 낮음 보호 효과 가능

방사능 노출여부와 질병 발병 여부 실험: 상대 위험도 추정치는 \(\frac{{\widehat{\pi}}_{1}}{{\widehat{\pi}}_{2}} = \frac{0.05}{0.01} = 5\)로, 방사능 노출집단의 질병 발생율은 미노출 집단보다 5배 높다.

오즈: 어떤 사건이 성공할 확률을 실패할 확률로 나눈 비율로 정의된다. 성공 확률을 \(\pi\)라고 할 때, 오즈는 다음과 같이 정의된다.

\[\text{Odds} = \frac{\pi}{1 - \pi}\]

예를 들어, 한국이 폴란드와의 축구 경기에서 이길 확률이 \(\pi = 0.1\)이라면, 한국의 오즈는 \(\frac{0.1}{1 - 0.1} = \frac{0.1}{0.9} = \frac{1}{9}\)이다. 한국이 한 번 이기기 위해서는 평균적으로 9번 질 것이라는 의미로 해석할 수 있다.

오즈비의 정의와 해석: 오즈비는 두 집단 간 사건 발생의 상대적인 가능성을 비교하는 지표로, 각 집단의 오즈를 비율로 나타낸 값이다.

\[\text{OR} = \frac{\frac{\pi_{1}}{1 - \pi_{1}}}{\frac{\pi_{2}}{1 - \pi_{2}}} = \frac{\pi_{1}(1 - \pi_{2})}{\pi_{2}(1 - \pi_{1})}\]

오즈비(OR) 해석 기준
OR 값 의미 해석
OR = 1 두 집단 오즈 동일 독립 (연관성 없음)
OR > 1 분자 집단 사건 발생 가능성 높음 위험 요인
OR < 1 분자 집단 사건 발생 가능성 낮음 보호 효과 가능

건강집단과 질병집단 오즈비: \(\text{oddsratio} = \frac{(20/6)}{(380/594)} = 5.2\), 방사능 노출은 질병 발생과 유의한 양의 연관성을 보였으며, 노출군의 질병 오즈는 비노출군에 비해 약 5.2배 높았다.

오즈비 추론: 두 반응 변수가 서로 독립인지 검정하기 위해 \(\ln(OR)\)을 활용한다. 두 변수가 독립이면 \(\ln(1) = 0\)이고 좌우 대칭의 형태를 갖는다.

표본의 크기가 커지면 \(\widehat{\ln(OR)} \sim N(ln(OR),\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}})\)이므로 신뢰구간은 \(\widehat{\ln(OR)} \pm z_{1 - \alpha/2}\sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}}\)이다.

#오즈비 신뢰구간
import scipy.stats as st
hat_or=(20/6)/(380/594)
se_or=(1/20+1/6+1/380+1/594)**0.5
z=st.norm.ppf(0.975,0,1)
hat_or-z*se_or,hat_or+z*se_or

(4.289172810142199, 6.131879821436749)

방사능 노출은 질병 발생과 유의한 양의 연관성이 있으며, 노출군의 질병 오즈는 비노출군에 비해 약 5.2배 유의적으로 높다.

2 교차표 검정

2.1 개념

두 개의 범주형 변수를 각각 X와 Y로 표시하고 각각 R, C 수준을 갖고 있다고 하자. X를 행으로 Y를 열로 하여 분할표를 만들면 \(R \times C\)개의 결합 조건이 존재한다. 이를 \(R \times C\) 교차표라 한다.

\(R \times C\) 교차표 구조
X  Y 범주1 범주2 … 범주C 합계
범주1 \(\pi_{11}\) \(\pi_{12}\) … \(\pi_{1C}\) \(\pi_{1+}\)
범주2 \(\pi_{21}\) \(\pi_{22}\) … \(\pi_{2C}\) \(\pi_{2+}\)
… …
범주R \(\pi_{R1}\) \(\pi_{R2}\) … \(\pi_{RC}\) \(\pi_{R+}\)
합계 \(\pi_{+1}\) \(\pi_{+2}\) … \(\pi_{+C}\) \(\pi_{++}\)
  • \(\pi_{ij}\): \(P(X = i,Y = j)\) — X는 범주 \(i\), Y는 범주 \(j\)에 속할 확률변수 \((X,Y)\) 결합확률분포함수
  • \(\pi_{i+}\): \(P(X = i)\) — 확률변수 \(X\)의 주변확률분포함수
  • \(\pi_{+j}\): \(P(Y = j)\) — 확률변수 \(Y\)의 주변확률분포함수
  • \(\pi_{++} = 1\)
  • \(O_{ij}\): 셀 \((i,j)\) 관측빈도
교차표 검정 방법 비교
검정 목적 표본 추출 사용 조건
독립성 검정 두 변수 간 독립 여부 전체에서 단일 표본 기대도수 ≥ 5
동질성 검정 집단 간 분포 동일 여부 집단별 독립 표본 기대도수 ≥ 5
Fisher 정확검정 2×2 소표본 독립 검정 2×2 소표본 기대도수 < 5
McNemar 검정 짝진 자료 비율 변화 동일 개체 전·후 측정 이진형 반복 측정
카이제곱 검정 사용 조건
조건 기준 위반 시 조치
기대도수 모든 셀 \(E_{ij} \geq 5\) Fisher’s exact test 사용
표본 독립성 관측값이 서로 독립 짝진 자료는 McNemar 검정
표본 크기 충분히 커야 함 소표본이면 Fisher 검정 권장

기대도수 \(E_{ij} = \frac{O_{i+} \cdot O_{+j}}{O_{++}}\) (행 합계 × 열 합계 / 전체)

2.2 독립성 검정

범주형 자료의 관계를 분석할 때, 두 범주형 변수 간의 연관성이 존재하는지를 평가하기 위한 대표적인 방법이 독립성 검정이다.

통계적 가설

  • 귀무가설: 두 변수는 서로 독립이다. \(\pi_{ij} = \pi_{i+}\pi_{+j}\) for all \((i,j)\)
  • 대립가설: 두 변수는 서로 독립이 아니다 (즉, 관련이 있다).

독립이라는 것은, 한 변수의 특정 범주에 속하는 비율이 다른 변수의 범주에 관계없이 일정하다는 의미다. 기대도수는 귀무가설이 옳다는 가정 하에서 계산되는 셀의 빈도이다.

카이제곱 검정통계량

\[ts = \sum_{i,j}\frac{(O_{ij} - E_{ij})^{2}}{E_{ij}} \sim \chi^{2}((R - 1) \times (C - 1))\]

  • \(O_{ij}\): 셀 \((i,j)\)의 관측빈도
  • \(E_{ij} = \frac{O_{i+}O_{+j}}{O_{++}}\): 독립 가정 하 기대빈도
  • 자유도: \((R-1) \times (C-1)\)

사례분석: 성별(남, 여)에 따른 선호하는 커피 종류(아메리카노, 라떼, 에스프레소) 간의 관계를 분석하고자 한다.

성별 × 커피 선호 교차표
아메리카노 라떼 에스프레소 합계
남성 30 25 15 70
여성 20 30 30 80
합계 50 55 45 150

귀무가설: 성별과 커피 선호는 독립이다 (즉, 성별에 따라 커피 선호가 달라지지 않는다)

import pandas as pd
from scipy.stats import chi2_contingency
# 교차표 데이터
data = [[30, 25, 15],   # 남성
        [20, 30, 30]]   # 여성
columns = ['Americano', 'Latte', 'Espresso']
index = ['Male', 'Female']

df = pd.DataFrame(data, index=index, columns=columns)

# 카이제곱 독립성 검정
chi2, p, dof, expected = chi2_contingency(df)

# 결과 출력
print("✅ 카이제곱 통계량:", round(chi2, 3))
print("✅ p-value:", round(p, 4))

# 행 퍼센트 계산
row_percent = df.div(df.sum(axis=1), axis=0) * 100
row_percent_rounded = row_percent.round(2)
print("\n📊 행 퍼센트 (%):")
print(row_percent_rounded)

✅ 카이제곱 통계량: 6.818
✅ p-value: 0.0331
📊 행 퍼센트 (%):
Americano Latte Espresso
Male 42.86 35.71 21.43
Female 25.00 37.50 37.50

결론: 성별 × 커피 선호 독립성 검정
검정통계량 자유도 유의확률
6.818 2 0.033

유의확률(0.033) < 유의수준(0.05) → 귀무가설 기각: 성별과 커피 선호 간에 통계적으로 유의한 연관성이 존재한다.

  • 남성: 아메리카노(42.86%) 선호 높음
  • 여성: 에스프레소(37.5%)와 라떼(37.5%) 선호 높음

2.3 동질성 검정

동질성 검정은 두 개 이상의 모집단으로부터 각각 표본을 추출하였을 때, 이 모집단들이 하나의 공통된 분포(또는 비율 구조)를 가지고 있는지를 검정하는 절차이다.

1900년 Karl Pearson에 제안한 방법으로 multinomial(다항) distribution의 확률이 귀무가설에서 설정한 값과 동일한지를 검정한다.

  • 귀무가설: \(\pi_{ij} = \pi_{kj}\), 모든 \(j = 1,2,...,C\) 그리고 \(i \neq k\)
  • 대립가설: 귀무가설은 사실이 아니다.

Pearson Chi-square Statistic \(\chi^2\) -검정 통계량: 독립성 검정과 동일한 통계량을 사용한다.

\[ts = \sum_{i,j}\frac{(O_{ij} - E_{ij})^{2}}{E_{ij}} \sim \chi^{2}((R - 1) \times (C - 1))\]

사례분석: 한 음료회사가 지역별(서울, 부산) 소비자들을 대상으로, 선호하는 음료 종류(탄산음료, 주스, 생수)에 대한 조사를 실시하였다. 각 지역에서 100명씩 표본을 추출하여 선호도를 조사한 결과는 다음과 같다.

지역 × 음료 선호 교차표
지역 탄산음료 주스 생수 합계
서울 40 35 25 100
부산 30 25 45 100
합계 70 60 70 200

귀무가설: 두 지역(서울, 부산)의 음료 선호 분포는 동일하다 (즉, 모집단의 분포가 동질적이다)

# 독립성 검정 코드와 동일함

✅ 카이제곱 통계량: 8.81
✅ p-value: 0.0122
📊 행 퍼센트 (%):
Soda Juice Water
Seoul 40.0 35.0 25.0
Busan 30.0 25.0 45.0

결론: 지역 × 음료 선호 동질성 검정
검정통계량 자유도 유의확률
8.81 2 0.012

유의확률(0.012) < 유의수준(0.05) → 귀무가설 기각: 서울과 부산의 음료 선호 분포는 동일하지 않다.

  • 서울: 탄산음료(40%)와 주스(35%) 선호 높음
  • 부산: 생수(45%) 선호 상대적으로 높음

2.4 Fisher’s 정확검정 exact test

Fisher’s exact test는 1934년, 피셔가 유전자 분리비 연구 및 실험설계의 정교화를 위해 고안한 검정이다. 이 검정은 당시의 계산 자원 한계에도 불구하고, “작은 표본에서의 정확한 결론”을 도출할 수 있는 기법으로 주목받았다. 일반적인 \(R \times C\) 교차표에서도 이론적으로 수행 가능하지만, 실무에서는 계산량이 급격히 증가하므로 2×2 표 이외에는 거의 사용되지 않는다.

Fisher’s Exact Test 사용 시기
조건 권장 검정
기대도수 \(E_{ij} \geq 5\) (모든 셀) 카이제곱 검정
기대도수 \(E_{ij} < 5\) (일부 셀) Fisher’s exact test
2×2 소표본 Fisher’s exact test
\(R \times C\) (R,C > 2) 소표본 계산 복잡 → 일반적으로 미사용

Fisher가 이 검정을 소개하면서 사용한 일화로 유명한 것이 바로 “홍차 마시는 여인” 실험이다. 한 여성이 “우유를 먼저 넣은 차”와 “차를 먼저 넣은 우유”를 맛만 보고 구분할 수 있다고 주장하자, Fisher는 8잔 중 4잔씩 두 조건을 섞어 무작위로 제공하고, 이 여성이 구분할 확률을 순열 조합으로 계산하여 검정했다.

2×2 교차표

Fisher’s exact test 2×2 교차표
성공 실패 합계
A 그룹 a b a+b
B 그룹 c d c+d
합계 a+c b+d n

검정통계량: 주어진 행과 열의 합이 고정된 상황에서 셀 a에 특정한 값이 나올 확률은 다음과 같이 초기하분포를 따른다.

\[P(a) = \frac{\binom{a + b}{a} \cdot \binom{c + d}{c}}{\binom{n}{a + c}}\]

피셔 사례분석

  • 귀무가설: 여성의 선택은 무작위이며, 실제 구분 능력이 없다
  • 대립가설: 여성은 차/우유 순서를 식별할 수 있다
홍차 마시는 여인 실험 결과
Fisher 사례 성공 실패 합계
차를 먼저라 판단 3 1 4
우유를 먼저라 판단 1 3 4
합계 4 4 8

유의확률 \(P(a \geq 3|a \sim HG(N = 8,K = 4,n = 4)) = 0.2429\)이므로 귀무가설을 기각할 수 없으므로 이 결과만으로는 여성이 정확하게 구분한다고 보기는 어렵다. 하지만 만약 4잔 모두 정답(4 vs. 0)이었다면, p-value는 약 0.014로, 유의미한 능력이 있다고 결론내릴 수 있다.

from scipy.stats import fisher_exact

# 2x2 교차표 (차례대로: 정답, 오답)
table = [[3, 1],  # 여성 선택 = 차 먼저 (맞춤 3, 틀림 1)
         [1, 3]]  # 여성 선택 = 우유 먼저 (틀림 1, 맞춤 3)

# 양측 검정
oddsratio, p_value = fisher_exact(table, alternative='two-sided')

print("오즈비:", round(oddsratio, 2))
print("p-value:", round(p_value, 4)/2)

오즈비: 9.0
p-value: 0.2429

결론: Fisher’s 정확검정 (홍차 실험)
오즈비 유의확률
9.0 0.243

유의확률(0.243) > 유의수준(0.05) → 귀무가설 채택: 이 결과만으로는 여성이 차와 우유의 순서를 구분할 능력이 있다고 통계적으로 입증하기 어렵다.

단, 오즈비 9.0은 여성이 일정 부분 구분 능력이 있었을 가능성을 정량적으로 시사한다. 4잔 모두 정답이었다면 p ≈ 0.014로 귀무가설이 기각된다.