빅데이터분석기사/작업형3

[작업형3] 일원배치법

seo0seok 2023. 6. 23. 03:23

// 퇴근후딴짓 님의 강의를 참고하였습니다. //

 

1. 일원배치법

- 관측치가 3개 이상일 때 활용

  • 그룹 간의 평균 차이를 비교하기 위해 사용되는 통계적 검정
  • 한개의 변수(그룹)에 따라 평균의 차이가 통계적으로 유의미한지 검정
  • 양측 검정만 있음 (방향이 없음)

 

문제) 빅데이터 분석기사 실기를 세 가지 다른 교육 방법(A, B, C)을 도입하여 수험생들의 실기시험 성적을 비교하고자 합니다. 40명의 학생들을 무작위로 12명씩 세 그룹으로 나누어 교육을 시행한 후, 시험을 실시하였습니다. 다음은 각 그룹의 수험생들의 실기시험 성적 데이터입니다. (단, 각 그룹의 데이터는 정규성을 만족하고 그룹간의 등분산성은 동일하다.)

 

- 귀무가설(H0) : 세 그룹 간의 평균 실기시험 성적 차이가 없다. (모평균의 차이가 없다).

- 대립가설(H1) : 세 그룹 간의 평균 실기시험 성적 차이가 있다. (모평균이 모두 같지는 않다)

 

# 데이터 생성 (실행)
import pandas as pd
group_A = [78, 85, 92, 88, 76, 81, 80, 79, 83, 89, 91, 87]
group_B = [77, 74, 84, 82, 79, 80, 85, 88, 81, 76, 78, 83]
group_C = [79, 78, 72, 75, 74, 76, 73, 68, 71, 75, 79, 72]

pd.DataFrame({
    'group_A':group_A,
    'group_B':group_B,
    'group_C':group_C
}).to_csv("oneway.csv", index=False)
import pandas as pd
import scipy.stats as stats
df = pd.read_csv('oneway.csv')

 

정규성 검정)

# [정규성 검정] shapiro (H0: 정규분포를 따른다. H1: 정규분포를 따르지 않는다.)
# 주어진 데이터가 정규 분포를 따르는지를 확인
print(stats.shapiro(df['group_A']))
print(stats.shapiro(df['group_B']))
print(stats.shapiro(df['group_C']))

실행 결과 :
ShapiroResult(statistic=0.9519118666648865, pvalue=0.6650832295417786)
ShapiroResult(statistic=0.9926441311836243, pvalue=0.9999779462814331)
ShapiroResult(statistic=0.9600766897201538, pvalue=0.7849239110946655)

→ 세 컬럼 모두 p-value값이 0.05보다 커 귀무가설을 채택한다. 즉, 정규분포를 따른다.

 

 

등분산 검정)

# [등분산 검정] levene (H0: 각 그룹 데이터는 등분산을 가진다. H1: 하나 이상의 그룹이 등분산을 가지지 않는다.)
# 그룹 간 분산이 동일한지를 확인하기 위한 검정
print(stats.levene(df['group_A'], df['group_B'], df['group_C']))

실행 결과 :
LeveneResult(statistic=2.437300743889479, pvalue=0.10297619038422344)

→ 세 컬럼의 p-value값이 0.05보다 커 귀무가설을 채택한다. 즉, 등분산이다.

 

 

문제1) F값 (반올림하여 소수 둘째자리까지 계산)

# 일원배치법 수행
f_statistic, p_value = stats.f_oneway(df['group_A'], df['group_B'], df['group_C'])
# F-value
print(round(f_statistic,2))

실행 결과 : 
15.57

→ stats.f_oneway 함수에 세 컬럼을 넣어 f_statistic을 출력하면 15.17이 나온다.

 

 

문제2) P값 (반올림하여 소수 여섯째자리까지 계산)

# p-value
print(format(p_value,'.6f'))

실행 결과 : 0.000017

→ stats.f_oneway 함수에 세 컬럼을 넣어 p-value를 출력하면 0.000017이 나온다.

 

 

문제3) 검정수준(유의수준 0.05하)

 

→ pvalue값이 0.000017로 유의수준 0.05보다 낮아 귀무가설을 기각한다.

→ 즉, 대립가설이 채택되므로 교육방법에 따라 시험결과의 차이가 있다고 할 수 있다.