TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 - 수학 | 통계학>

[개발자를 위한 수학] 추론통계: 가설 검정 (+파이썬)

by 기록자_Recordian 2024. 10. 6.
728x90
반응형
이전 내용
 

[개발자를 위한 수학] 추론 통계

추론 통계 추론 통계는 모집단에 대한 어떤 미지의 양상을 알기 위해 통계학을 이용하여 추측하는 과정을 지칭한다. 추론 통계에서는 표본과 모집단 간의 추상적인 관계가 본격적으로 작동한

puppy-foot-it.tistory.com


가설 검정

 

병원 간호사회 자료(하단)에 따르면 코로나19의 회복기간은 평균 13~18일 (중앙값인 15.5)이고, 표준 편차는 1.5일인 정규 분포에 따른다. 

출처: 병원 간호사회

이때 특정 기간(12.5일부터 18.5일) 사이에 회복될 확률을 계산해보자.

 

[코로나19 12.5~18.5일 사이 회복될 확률 계산하기]

#코로나 19 12.5~18.5일 사이 회복될 확률 계산하기
from scipy.stats import norm
# 코로나19 회복 기간은 평균 15.5일 이고 표준 편차는 1.5일
mean = 15.5
std_dev = 1.5

# 12.5일에서 18.5일 사이에 회복될 확률은?
x = norm.cdf(18.5, mean, std_dev) - norm.cdf(12.5, mean, std_dev)
print(x)

 

해당 기간동안 회복될 확률은 95%이며, 나머지 5%의 확률로부터 회복에 18.5일 이상 걸릴 확률은 2.5%, 12.5일 미만이 걸릴 확률은 2.5% 라는 것을 유추할 수 있다.

 

이제 40명으로 구성된 테스트 그룹에 실험용 백신을 투여한 결과, 감기에서 회복하는 데 평균 14.5일이 걸렸다고 가정해보자.

  • 백신이 영향을 미쳤는지 (통계적으로 유의미한 결과를 보여줬는지) ▶ 대립 가설
  • 백신이 효과가 없었고 14.5일간의 회복은 우연의 일치였는지 ▶ 귀무 가설

이 가설을 계산(검정)할 수 있는 방법에는 단측 검정과 양측 검정이 있다.

출처: https://velog.io/@tnsida315/t-%EA%B2%80%EC%A0%95


◆ 단측 검정(one-tailed test)

단측 검정에서는 일반적으로 부등식을 사용해 귀무 가설과 대립 가설을 설정하며, 모집단의 평균을 중심으로 가설을 세운다. 즉, 15.5 보다 크거나 같고 (귀무 가설 H0) 아니면 15.5보다 작다고(대립 가설 H1) 다음과 같이 가설을 세운다.

귀무가설 H0 : 모집단 평균 ≥ 15.5
대립 가설 H1 : 모집단 평균 ≤ 15.5

 

귀무가설을 기각하려면 백신을 접종한 환자 표본의 평균이 우연이 아닐 가능성이 높다는 것을 보여줘야 하며, 일반적으로 0.05 이하의 p 값은 통계적으로 유의미한 것으로 간주되므로 이를 임계값으로 사용한다.

그런다음 역CDF 를 사용해 파이썬에서 이 값을 계산해보면

 

[파이썬으로 누적 면적 5%에 해당하는 x 값 계산]

# 파이썬으로 누적 면적 5%에 해당하는 x 값 계산
from scipy.stats import norm

# 코로나19 회복 기간은 평균 15.5일 이고 표준 편차는 1.5일
mean = 15.5
std_dev = 1.5

# 누적 면적 5%에 해당하는 값은?
x = norm.ppf(0.05, mean, std_dev)

print(x)

약 13.03이 왼쪽 꼬리에서 0.05 면적에 해당하는 회복 일수이다.

 

따라서 테스트 그룹이 평균 13.03일 이하의 회복 시간을 달성하면 백신의 영향이 통계적으로 유의미한 것으로 간주된다. 그러나 표본의 평균 회복 시간은 실제로 14.5일이므로 귀무 가설의 기각 영역에 속하지 않는다. 따라서 이 통계적 유의성 테스트는 실패한다.

 

14.5일 까지의 면적이 우리가 구할 p 값이며, 이를 코드를 통해 계산해보면

 

[단측 검정의 p 값 계산하기]

# 단측 검정 p 값 계산하기
from scipy.stats import norm

# 코로나19 회복 기간은 평균 15.5일 이고 표준 편차는 1.5일
mean = 15.5
std_dev = 1.5

# 14.5 보다 작거나 같을 확률
p_value = norm.cdf(14.5, mean, std_dev)

print(p_value)

0.25의 p 값은 통계적 유의성 임계값인 0.05보다 크므로 백신 테스트를 성공으로 간주하지 않고 귀무 가설을 기각하지 못한다.


◆ 양측 검정(two-tailed test)

앞서 수행한 검정은 한쪽 꼬리에서만 통계적 유의성을 찾기 때문에 단측 검정이라고 부른다.

그러나 종종 양측 검정을 사용하는 것이 더 안전하고 나은데, 이는 귀무 가설을 기각하기 어렵게 만들고 검정을 통과하기 위해 더 강력한 증거를 요구한다. 만약 백신이 코로나19를 악화시켜 해당 질병이 더 오래 지속될 수 있다면? 그 확률도 포착하고 그 방향의 변동을 고려해야 한다.

그래서 양측 검정이 더 신뢰할 수 있고 가설이 한 방향으로 편향되지 않기 때문에 대부분 양측 검정을 선호한다.

 

양측 검정을 수행하기 위해 귀무 가설과 대립 가설을 '같음'과 '같지 않음' 구조로 구성한다.

백신 테스트에서 귀무 가설을 평균 회복 시간이 15.5일 이라고 설정한다. 하지만 대립 가설은 새로운 백신 때문에 평균 회복 시간이 15.5일이 아니라는 것이다.

귀무가설 H0 : 모집단 평균 ≥ 15.5
대립가설 H1 : 모집단 평균 ≠ 15.5

 

그리고 백신이 감기 회복 시간을 개선하는지 여부가 아니라 어떤 영향을 미쳤는지 테스트 하기 위해 대립 가설을 구성한다. 즉, 백신으로 인해 코로나19가 지속되는 시간이 길어졌는지 테스트하는 것도 포함된다.

 

이것은 통계적 유의성 임곗값을 한쪽 꼬리가 아닌 양쪽 꼬리에 나눈다는 것을 의미하며, 5%의 통계적 유의성을 테스트하는 경우에 이를 분할해 각 꼬리에 2.5%씩 절반을 부여하여 백신의 평균 회복 시간이 어느 한 영역에 속하면 검정에 성공하고 귀무 가설을 기각한다.

 

파이썬을 통한 통계적 유의성이 5%인 양쪽의 범위 계산은 아래와 같다.

 

[통계적 유의성이 5%인 범위 계산하기]

# 통계적 유의성이 5%인 범위 계산하기
from scipy.stats import norm

# 코로나19 회복 기간은 평균 15.5일 이고 표준 편차는 1.5일
mean = 15.5
std_dev = 1.5

# 누적 면적 2.5%에 해당하는 x 값
x1 = norm.ppf(0.025, mean, std_dev)

# 누적 면적 97.5%에 해당하는 x 값
x2 = norm.ppf(0.975, mean, std_dev)

print(x1)
print(x2)

 

백신 테스트 그룹의 표본 평균값은 14.5이다. 14.5는 12.56 이상이고 18.43 미만이다. 따라서 단측 검정과 마찬가지로 여전히 귀무 가설을 기각하지 못한다.

 

이때 양측 검정의 p 값은 무엇일까?

양측 검정에서 p 값을 계산하려면 14.5의 왼쪽 면적 뿐만 아니라 오른쪽 꼬리의 대칭되는 면적도 고려해야 한다.

14.5는 평균(15.5)보다 1일 낮으므로 평균보다 1일 높은 16.5 이상의 영역도 계산에 포함된다.

 

파이썬으로 양측 검정의 p 값을 계산하는 방법은 아래와 같다.

 

[양측 검정의 p 값 계산하기]

# 양측 검정의 p 값 계산하기
from scipy.stats import norm

# 코로나19 회복 기간은 평균 15.5일 이고 표준 편차는 1.5일
mean = 15.5
std_dev = 1.5

# 14.5보다 작거나 같을 확률
p1 = norm.cdf(14.5, mean, std_dev)

# 16.5보다 크거나 같을 확률
p2 = 1.0 - norm.cdf(16.5, mean, std_dev)

# 양측 검정의 p 값
p_value = p1 + p2

print(p_value)

두 면적을 모두 합하면 p값이 0.504가 나온다. 이 값은 p 값의 임계값인 0.05를 통과하지 못한다.


[출처]

개발자를 위한 필수 수학

병원 간호사회

beginner's luck - velog

 

 

728x90
반응형