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

[작업형3] 표본평균 / 검정통계량 / p-value / 채택.기각 구하기

seo0seok 2023. 6. 23. 01:26

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

 

시험환경 : https://dataq.goorm.io/exam/116674/체험하기/quiz/3

 

문제) 주어진 데이터(data/blood_pressure.csv)에는고혈압 환자 120명의 치료 전후의 혈압이 저장되어 있다. 해당 치료가 효과가 있는지 (즉, 치료 후의 혈압이 감소했는지) 쌍체표본 t-검정(paired t-test)를 통해 답하고자 한다. 가설은 아래와 같다.

 

- bp_before : 치료 전 혈압

- bp_after : 치료 후 혈압

- H0 : 귀무가설 (치료 효과가 없을 것이다.)

- H1 : 대립가설 (치료 효과가 있을 것이다.)

 

문제1) 

  • μd(치료 후 혈압 - 치료 전 혈압)의 표본평균을 입력하시오. (반올림하여 소수 둘째자리까지 계산)
import pandas as pd
df = pd.read_csv("data/blood_pressure.csv")
df['diff'] = df['bp_after'] - df['bp_before']

 → 먼저 μd를 'diff'라는 컬럼에 새로 만들어준다. 식은 '치료 후 혈압' - '치료 전 혈압'이다.

 

print(round(df['diff'].mean(),2))

실행 결과 : -5.09

→ 평균은 'diff'컬럼에 mean()을 사용해 구해준 후 round( ,2) 함수를 사용해 소수 둘째짜리까지 나타내준다.

→ 결과값이 마이너스가 나왔으므로 대립가설이 채택되어 치료 효과가 있는 것으로 볼 수 있다.

 

문제2) 

  • 위의 가설을 검정하기 위한 검정통계량을 입력하시오. (반올림하여 소수 넷째짜리까지 계산)
from scipy import stats
result = stats.ttest_rel(df['bp_after'], df['bp_before'], alternative="less")
print(result)
print(round(result.statistic,2))

실행 결과 : 
Ttest_relResult(statistic=-3.3371870510833657, pvalue=0.000564895732240411)
-3.34

쌍체표본 t-검정(paired t-test)으로 검정통계량을 구하기 위해서는 먼저 scipy 라이브러리의 stats를 import 해준다.

 

→ stats.ttest_rel 함수안에 μd를 구한식 순서대로 넣어줘야한다.

    (df['bp_after'], df['bp_before'] 순서) 

 

→ alternative 옵션은 greater / less / two-sided 3가지가 있다. (대립가설 기준으로 선택)

 

    → greater : df['bp_after'] > df['bp_before'] 

    → less : df['bp_after'] < df['bp_before'] 

    → two-sided : df['bp_after'] != df['bp_before'] 

 

→ 대립가설이 μd < 0 이므로 less 옵션을 선택해준다.

 

st, pv = stats.ttest_rel(df['bp_after'], df['bp_before'], alternative="less")
print(round(st,2))

실행 결과 : 
-3.34

→ stats.ttest_rel 결과값을 2개의 변수로 직접 받는 방법도 있다.

 

문제3) 

  • 위의 통계량에 대한 p-값을 구하여 입력하시오. (반올림하여 소수 넷째자리까지 계산)
from scipy import stats
result = stats.ttest_rel(df['bp_after'], df['bp_before'], alternative="less")
print(result)
print(round(result.pvalue,4))

실행 결과 : 
Ttest_relResult(statistic=-3.3371870510833657, pvalue=0.000564895732240411)
0.0006
st, pv = stats.ttest_rel(df['bp_after'], df['bp_before'], alternative="less")
print(round(pv,4))

실행 결과 : 
0.0006

 → 2번 문제에서 구한값에서 result.pvalue값을 가져오던가, 변수로 직접 받아오는 방법이 있다.

 

문제4) 

  • 유의수준 0.05 하에서 가설검정의 결과를 (채택/기각) 중 하나를 선택하여 입력하시오.

 

→ p-value(0.0006) < 유의수준(0.05) 이므로 귀무가설을 기각한다.(대립가설을 채택한다.)

 

→ 답변 제출은 귀무가설 기준으로 해야한다. [정답 : 기각]