Python에서 F-테스트
이 자습서는 F 통계, F 분포 및 Python을 사용하여 데이터에 F-테스트를 수행하는 방법에 관한 것입니다.
F 통계량은 두 모집단의 평균이 크게 다른지 확인하기 위해 ANOVA 테스트 또는 회귀 분석 후에 얻은 숫자입니다. 이는 T-테스트의 T 통계와 유사하며 T-테스트를 수행하면 단일 변수가 통계적으로 유의한지 여부를 알 수 있지만 F 테스트는 변수 집합이 통계적으로 유의한지 여부를 알려줍니다.
통계적으로 유의미하다은 무슨 뜻인가요?
상당한 결과를 얻었다면 그러한 결과를 얻은 것은 우연이 아닐 것입니다. 검정 결과가 통계적으로 유의하지 않으면 효과가 없고 귀무 가설을 기각할 수 없으므로 폐기해야 합니다.
F-통계 및 P-값
전체 결과가 유의한지 판단할 때 F 통계량과 p-값을 고려해야 합니다.
왜? 유의한 결과가 반드시 모든 변수도 유의하다는 것을 의미하지는 않습니다. 간단히 말해서 통계는 모든 변수의 결합된 효과를 비교하는 것입니다.
ANOVA의 F 값
분산 분석 테스트는 둘 이상의 범주 그룹 간에 통계적으로 중요한 차이가 있는지 확인하기 위해 분산 기반 평균 차이를 평가하는 통계 분석 방법입니다.
ANOVA는 독립 변수를 또 다른 중요한 구성 요소인 두 개 이상의 그룹으로 나눕니다. 예를 들어, 하나 이상의 그룹이 종속 변수에 영향을 미칠 것으로 예측되는 반면 다른 그룹은 통제 그룹으로 사용되어 영향을 미칠 것으로 예측되지 않을 수 있습니다.
어떤 면에서 ANOVA에서 F 값은 두 통계 또는 모집단의 평균 사이의 분산이 유의미하게 다른지 여부에 대한 질문에 대답하는 데 도움이 되는 도구와 같은 역할을 합니다. 귀무가설이 참인 경우 관찰된 결과만큼 극단적인 결과를 얻을 가능성인 P 값은 마찬가지로 ANOVA 테스트의 F 값에 의해 결정됩니다.
f 비율로 알려진 검정 통계량은 다음과 같이 계산할 수 있습니다.
<사업부>
$$
F = \frac{Var(X)}{Var(Y)}
$$
Python을 사용하여 다음 테스트를 수행하려면 Python에서 SciPy
모듈을 사용할 수 있습니다.
SciPy는 최적화, 적분, 보간, 고유값 문제, 대수 방정식, 미분 방정식, 통계 등 많은 문제 유형에 대한 알고리즘을 제공합니다.
scipy
를 설치하려면 다음 명령을 실행하십시오.
pip install scipy
scipy.stats
모듈에서 다음 클래스를 사용할 수 있습니다. scipy
의 stats
클래스에는 통계 작업을 수행하는 데 필요한 모든 기능과 클래스가 포함되어 있습니다.
>>> from scipy.stats import f
<span style="color: blue;">scipy.stats.f</span>
에는 CDF(Cumulative distribution function) 방식이 있습니다. 주어진 통계에 대해 p-값을 사용하여 계산할 수 있습니다.
따라서 주어진 알파 수준에 대해 NULL 가설을 기각할지 또는 수락할지 결정할 수 있습니다.
아래 예를 고려하십시오.
모듈 가져오기 및 변수 만들기.
from scipy.stats import f
import numpy as np
a = np.array([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
b = np.array([1, 3, -1, 2, 1, 5, -1, 6, -1, 2])
alpha = 0.05 # you can set to level.
F 값을 계산하는 공식은 Var(X)/Var(Y)
입니다.
# calculating F value.
F = a.var() / b.var()
F는 분포이므로:
df1 = len(a) - 1
df2 = len(b) - 1
scipy.stats.f
클래스에는 주어진 통계에 대한 p-값과 임계값을 계산하는 데 사용할 수 있는 함수가 포함되어 있습니다.
# Fetching p-value.
p_value = f.cdf(F, df1, df2)
p_value > alpha
위의 코드에서 F 통계를 사용하여 계산된 p-값을 얻을 수 있습니다. a
의 분산이 b
의 분산과 같다는 NULL 가설을 기각합니다.
참고: F-테스트는 주어진 통계의 비정규성에 상당히 민감합니다.
정규성을 반영하는 제공된 데이터에 대해 확신이 없다고 가정합니다. F-검정에 대한 보다 강력한 대안은 Bartlett의 검정 또는 Levene의 검정입니다.
Scipy는 이러한 테스트를 수행할 수 있는 기능도 제공합니다.
Bartlett 테스트:
>>> from scipy.stats import bartlett
>>> x = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99]
>>> y = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05]
>>> z = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98]
>>> stat, p = bartlett(x, y, z)
>>> p
1.1254782518834628e-05
p-값은 매우 작습니다. 주어진 모집단의 분산이 동일하지 않다고 말할 수 있습니다.
이것은 편차의 차이 때문입니다.
>>> [np.var(x, ddof=1) for x in [x, y, z]]
[0.007054444444444413, 0.13073888888888888, 0.008890000000000002]
Levene의 테스트:
>>> from scipy.stats import levene
>>> x = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99]
>>> y = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05]
>>> z = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98]
>>> stat, p = levene(x, y, z)
>>> p
0.002431505967249681
p-값은 매우 작습니다. 주어진 모집단의 분산이 동일하지 않다고 말할 수 있습니다.
>>> [np.var(x, ddof=1) for x in [x, y, z]]
[0.007054444444444413, 0.13073888888888888, 0.008890000000000002]