-
빅데이터 분석기사 5) F 분포와 F 검정(F-test) 그리고 등분산성 검정데이터 사이언스(DS)와 통계 2024. 7. 28. 01:15
F 분포는 '두 카이제곱분포에 대한 비율'로써 정의된다.
두 분산을 비교하기 위해, 인위적으로 만든 분포라고 볼 수 있다.
F 통계량은 아래와 같이 정의된다.
예제) 수출용 PCB는 탄탄한 내구성을 위해, PCB 기판을 더 두껍게 만들고 있다. PCB 기계의 세팅 값에 변화를 주어, 수출용과 내수용으로 나누어 제작하고 있다고 할때, 샘플링하여 측정된 PCB 두께는 아래와 같다. 내수용 두께 = [12, 15, 14, 13, 14, 13, 16, 14, 15, 14, 14, 13, 15, 14, 13, 15, 14, 13, 14, 15] 수출용 두께 = [27, 29, 25, 30, 27, 28, 32, 26, 27, 30, 27, 30, 29, 28, 27, 26, 31, 28, 29, 27] 수출용 PCB와 내수용 PCB 두께의 분산이 동일한지 검정하여라.
# 수출용 PCB와 내수용 PCB 두께의 분산이 동일한지 검정하여라. # - 귀무가설: 두 분산은 차이가 없다. a_data = [12, 15, 14, 13, 14, 13, 16, 14, 15, 14, 14, 13, 15, 14, 13, 15, 14, 13, 14, 15] b_data = [27, 29, 25, 30, 27, 28, 32, 26, 27, 30, 27, 30, 29, 28, 27, 26, 31, 28, 29, 27] norm1 = stats.shapiro(a_data) # 정규성 확인 norm2 = stats.shapiro(b_data) # 정규성 확인 freedom_a = len(a_data)-1 freedom_b = len(b_data)-1 F_stats = np.var(a_data, ddof= 1) / np.var(b_data, ddof = 1) pvalue = min(stats.f.cdf(F_stats, freedom_a, freedom_b), stats.f.sf(F_stats, freedom_a, freedom_b)) * 2 # stats.f.cdf(F_stats, freedom_a, freedom_b)의 p_value는 0.51이었음 # 즉, 절반을 넘어가게 되므로, 1 - stats.f.cdf(F_stats, freedom_a, freedom_b)에 대해 곱하기 2를 수행해야함. F_stats, pvalue # 결론 : p_value가 0.05보다 작으므로 귀무가설을 기각한다. 등분산이라고 볼수 없다.
결과는 다음과 같다.
>> F_stats : 0.2877
>> p_value: 0.0093
유의 수준 5%로 결론을 내보자
>> p-value 값은 0.0093로 0.05보다 작다.
>> 즉, 귀무가설(=두 분산은 동일하다)을 기각할만큼, p-value 값이 작다.
>> 따라서 귀무가설을 기각할 수 있다.
>> 귀무가설을 기각 할 수 있으므로, 대립가설(=두 분산은 다르다)을 채택한다.
>> ∴ 위 data를 통해 추정시, 수출용과 내수용의 PCB 두께는 분산이 다르다고 볼 수 있다.
※ F 검정은 샘플이 정규할 때 적용 가능하므로,
정규성 검정을 수행한뒤 F 검정을 수행하는 것이 바람직하다.
※ F 분포는 t분포, 정규분포와는 달리 좌우 대칭이 아니다.
그럼에도 불구하고,
양측 가설시 stats.f.cdf(F_stats, freedom_a, freedom_b)과 1 - stats.f.cdf(F_stats, freedom_a, freedom_b)) 중에서
더 작은 면적 값의 2배로써 p-value를 구한다.
참고로, stats.f.sf(F_stats, freedom_a, freedom_b)는 1 - stats.f.cdf(F_stats, freedom_a, freedom_b)와 같다
그런데, 사실 등분산 검정은 정규분포가 아니더라도 가능하다.(검정 방법이 많다)
그 중에서도 유명하고 간단한 'Levene 등분산성 검정'을 수행해보자.
a_data = [12, 15, 14, 13, 14, 13, 16, 14, 15, 14, 14, 13, 15, 14, 13, 15, 14, 13, 14, 15] b_data = [27, 29, 25, 30, 27, 28, 32, 26, 27, 30, 27, 30, 29, 28, 27, 26, 31, 28, 29, 27] # Levene 등분산성 검정 수행 stats.levene(a_data, b_data) >> LeveneResult(statistic=7.332761578044598, pvalue=0.010092324480818794)
수행 결과, F 검정 결과와 동일하게
pvalue = 0.01009로 등분산하지 않다는 결과가 나왔다.
(물론, F 검정에서 나온 pvalue의 값까지 완전히 같지는 없다. 식과 알고리즘?이 다르다.)
데이터가 정규하지 않아도 등분산성을 수행할 수 있는 Levene을 기억해두자!
728x90'데이터 사이언스(DS)와 통계' 카테고리의 다른 글
빅데이터 분석기사 4) 카이제곱 분포와 검정(chi-squared test) (0) 2024.07.27 빅데이터 분석기사 3) t 검정(t-test)과 수행 예시 (0) 2024.07.27 빅데이터 분석기사 2) 중심 극한 정리와 t 검정 (t-test) (0) 2024.07.27 빅데이터 분석기사 1) 정규성 검정(Normality Test)과 p-value (0) 2024.07.26