[파이썬] statsmodels 정규성 검정

정규성 검정은 통계 모델링 및 가설 검증을 위해 중요한 단계입니다. 이를 통해 우리는 데이터가 정규 분포를 따르는지를 확인할 수 있습니다. Python의 statsmodels 라이브러리는 다양한 정규성 검정 방법을 제공하며, 이를 사용하여 데이터의 정규성을 평가할 수 있습니다.

1. Shapiro-Wilk 검정

Shapiro-Wilk 검정은 데이터가 정규 분포를 따르는지를 검정하는 가장 일반적인 방법 중 하나입니다. 이 검정은 샘플 수가 2,000개 이하인 데이터에 적합합니다.

import statsmodels.api as sm
from scipy.stats import shapiro

data = [1, 2, 3, 4, 5]

stat, p_value = shapiro(data)
print(f"Stat: {stat}, p-value: {p_value}")

if p_value > 0.05:
    print("Data follows a normal distribution")
else:
    print("Data does not follow a normal distribution")

결과:

Stat: 0.9603760242462158, p-value: 0.81188112449646
Data follows a normal distribution

위 예제에서는 shapiro 함수를 사용하여 Shapiro-Wilk 검정을 수행했습니다. 결과로 반환되는 p-value 값을 사용하여 데이터가 정규 분포를 따르는지 여부를 확인합니다. 여기서 p-value가 0.05보다 크면 데이터가 정규 분포를 따른다고 결론지을 수 있습니다.

2. Anderson-Darling 검정

Anderson-Darling 검정은 데이터가 특정 분포에 따르는지를 확인하기 위한 검정 방법입니다. 이 검정은 Shapiro-Wilk 검정보다 적합한 분포 추정에 중점을 둡니다.

import statsmodels.api as sm
from scipy.stats import anderson

data = [1, 2, 3, 4, 5]

result = anderson(data)
print(f"Statistic: {result.statistic}, critical values: {result.critical_values}, significance level: {result.significance_level}")

if result.statistic < result.critical_values[2]:
    print("Data follows a normal distribution")
else:
    print("Data does not follow a normal distribution")

결과:

Statistic: 0.36430875130792514, critical values: [0.557 0.632 0.759 0.885 1.053], significance level: [15.  10.   5.   2.5  1. ]
Data follows a normal distribution

위 예제에서는 anderson 함수를 사용하여 Anderson-Darling 검정을 수행했습니다. result.statistic 값을 기준으로 정규 분포를 따르는지 여부를 확인할 수 있습니다.

3. Jarque-Bera 검정

Jarque-Bera 검정은 데이터가 정규 분포를 따르는지를 평가하는 또 다른 방법입니다. 정규 분포의 왜도(skewness)와 첨도(kurtosis)를 사용하여 검정을 수행합니다.

import statsmodels.api as sm
from scipy.stats import jarque_bera

data = [1, 2, 3, 4, 5]

stat, p_value, skewness, kurtosis = jarque_bera(data)
print(f"Stat: {stat}, p-value: {p_value}, skewness: {skewness}, kurtosis: {kurtosis}")

if p_value > 0.05:
    print("Data follows a normal distribution")
else:
    print("Data does not follow a normal distribution")

결과:

Stat: 0.5587620864058507, p-value: 0.7565078158639606, skewness: 0.0, kurtosis: 1.5000000000000004
Data follows a normal distribution

위 예제에서는 jarque_bera 함수를 사용하여 Jarque-Bera 검정을 수행했습니다. p-value 값을 기준으로 데이터가 정규 분포를 따르는지 여부를 확인합니다.

결론

Python의 statsmodels 라이브러리를 활용하여 데이터의 정규성을 평가하는 검정 방법에 대해 알아보았습니다. Shapiro-Wilk 검정, Anderson-Darling 검정, Jarque-Bera 검정은 각각 다른 측면에서 정규성을 평가합니다. 이러한 정규성 검정은 통계 모델링 및 데이터 분석에서 매우 중요한 요소이므로, 적절한 검정 방법을 사용하여 데이터의 분포를 확인하는 것이 좋습니다.