statsmodels를 사용한 이원분산분석

한상우·2024년 9월 28일

기초 통계학

목록 보기
12/15

샘플 데이터 생성

  • two-way ANOVA의 가정을 만족시키는 데이터를 찾기 어려워 직접 샘플 데이터를 생성했다
# 랜덤 시드 설정 (재현 가능성 위해)
np.random.seed(42)

# 데이터 생성 조건
n_samples = 1000  # 샘플 수
category_A_levels = ['A1', 'A2']  # category A의 수준 (dof = 1)
category_B_levels = ['B1', 'B2']  # category B의 수준 (dof = 1)

# 상호작용 효과를 반영한 평균값 설정
mean_values = {
    ('A1', 'B1'): 10,
    ('A1', 'B2'): 15,
    ('A2', 'B1'): 15,  # 상호작용으로 인해 여기서는 값이 커짐
    ('A2', 'B2'): 10   # 상호작용으로 인해 여기서는 값이 작아짐
}

# 표준 편차 설정 (등분산성 유지)
std_dev = 3

# 샘플 데이터 생성
data = []

for _ in range(n_samples):
    # 무작위로 category A와 category B를 선택
    A = np.random.choice(category_A_levels)
    B = np.random.choice(category_B_levels)
    
    # 해당 그룹의 평균 값에 따라 정규 분포에서 종속 변수 값을 생성
    mean = mean_values[(A, B)]
    dependent_variable = np.random.normal(loc=mean, scale=std_dev)
    
    # 데이터 저장
    data.append([A, B, dependent_variable])

# 데이터프레임 생성
df = pd.DataFrame(data, columns=['category_A', 'category_B', 'dependent_variable'])

정규성 확인

  • 시각화 (KDE plot)

  • 정규성 검정 : 왜도나 첨도가 정규 분포에서 벗어날 때 이를 탐지하는 데 유리한 Jarque-Bera test를 통해 확인한다.

등분산성 확인

  • 이원분산분석은 정규성을 가정하므로 Bartlett's Test를 통해 등분산성을 확인한다

잔차의 독립성(자기 상관) 확인

  • 시각화 (ACF plot) : 대부분의 점이 색칠된 95% 신뢰구간 안에 있으면 잔차 간에 상관관계가 없다고 판단할 수 있다

  • Durbin-Watson test : 2와 가까운 값일수록 잔차가 독립적임

ANOVA table 확인

  • category_A의 주효과:

    • F-값: 1.977
    • p-value: 0.160
    • p-value가 유의수준보다 크므로 category_A는 종속 변수에 유의미한 영향을 미치지 않는다고 결론지을 수 있다.
  • category_B의 주효과:

    • F-값: 0.479
    • p-value: 0.489
    • p-value가 0.05보다 크므로 category_B도 종속 변수에 유의미한 영향을 미치지 않는다고 해석할 수 있다.
  • category_A와 category_B 간의 상호작용 효과 :

    • F-값: 674.974
    • p-value: 0.000
    • p-value가 0.05보다 매우 작으므로, category_A와 category_B 간의 상호작용 효과는 종속 변수에 유의미한 영향을 미친다고 결론지을 수 있다.

상호작용 효과 시각화

  • interaction plot을 그려 상호작용 효과를 시각적으로 확인

에타 제곱확인

  • category_A는 전체 분산 중 약 0.1%(0.001)을 설명한다. 이는 category_A가 종속 변수에 미치는 영향이 매우 작다는 것을 의미한다.

  • category_B는 전체 분산 중 거의 영향을 미치지 않는다고 볼 수 있다. 즉, category_B가 종속 변수에 미치는 효과는 매우 미미하거나 무시할 만한 수준이다.

  • 상호작용 효과(category_A)는 전체 분산 중 약 40.3%를 설명한다. 이는 category_A와 category_B가 함께 작용할 때 종속 변수에 상당한 영향을 미친다는 것을 의미한다.

  • 잔차(Residual)는 설명되지 않는 변동성으로, 전체 분산 중 약 59.5%는 독립 변수들로 설명되지 않는다는 것을 의미한다. 이는 종속 변수의 변동성을 설명하는 데 있어, 여전히 많은 부분이 다른 요인(독립 변수 이외의 요인)이나 오차에 기인한다는 것을 암시한다.

사후검정

컬럼설명
group1 / group2비교하는 두 그룹
meandiff두 그룹 간의 평균 차이
p-adj조정된 p-value
lower / upper95% 신뢰구간
reject두 그룹 간의 차이가 유의미한지 아닌지를 나타냄
profile
개인 공부용 블로그입니다

0개의 댓글