ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 데이터분석 기초 33 - 실습 예제 2, 3,4) 단일 표본 t 검정 (one-sample t- test)
    Python 데이터 분석 2022. 11. 7. 17:45

     

    실습 예제 2)

    # 실습 예제 2) 단일표본 t 검정 (one-sample t-test)
    # 귀무 : 어느 한 집단의 자료들 평균은 0이다.
    # 대립 : 어느 한 집단의 자료들 평균은 0이 아니다.
    
    np.random.seed(1)
    mu = 0
    n = 10
    x = stats.norm(mu).rvs(n) # 랜덤한 데이터 10개 생성
    print(x, np.array(x).mean()) # -0.0971408
    
    # sns.displot(x, kde=True, rug = True) # kde = 선, rug = 밑의 그래프
    # plt.show()
    result2 = stats.ttest_1samp(x, popmean = mu)
    # result2 = stats.ttest_1samp(x, popmean = 0.9)
    print('result2 : statistic(t-value) : {}, p-value : {}'.format(result2[0], result2[1]))
    # 해석 : p-value : 0.8121703589172078 > 0.05 이므로 귀무가설 채택. 어느 한 집단의 자료들 평균은 0이다.
    
    
    
    <console>
    [ 1.62434536 -0.61175641 -0.52817175 -1.07296862  0.86540763 -2.3015387
      1.74481176 -0.7612069   0.3190391  -0.24937038] -0.09714089080609985
    result2 : statistic(t-value) : -2.511903862200501, p-value : 0.033206859534901594

     

     

    실습 예제 3)

    하나의 집단에 대한 표본평균이, 예측된 평균과 차이가 있는지 검증

     

    # 실습 예제 3)
    # A중학교 1학년 1반 학생들의 시험결과가 담긴 파일을 읽어 처리 (국어 점수 평균검정) student.csv
    # 귀무 : A중학교 1학년 1반 학생들의 국어 점수 평균은 80이다.
    # 대립 : A중학교 1학년 1반 학생들의 국어 점수 평균은 80이 아니다.
    
    data = pd.read_csv('../testdata/student.csv')
    print(data.head(3))
    
    # 집단이 국어 하나이다.
    print(data.국어.mean()) # 72.9 vs 80.0 차이?
    result3 = stats.ttest_1samp(data.국어, popmean = 80)
    print('result3 : statistic(t-value) : {}, p-value : {}'.format(result3[0], result3[1]))
    # 해석 : p-value : 0.19856051824785262 > 0.05 이므로 귀무가설 채택. A중학교 1학년 1반 학생들의 국어 점수 평균은 80이다.
    
    
    <console>
        이름  국어  영어  수학
    0  박치기  90  85  55
    1  홍길동  70  65  80
    2  김치국  92  95  76
    72.9
    result3 : statistic(t-value) : -1.3321801667713213, p-value : 0.19856051824785262

     

     

    실습 예제 4)

    여아 신생아 몸무게의 평균 검정 수행 babyboom.csv 여아 신생아의 몸무게는 평균이 2800(g)으로 알려져 왔으나 이보다 더 크다는 주장이 나왔다. 표본으로 여아 18명을 뽑아 체중을 측정하였다고 할 때 새로운 주장이 맞는지 검정해 보자.

     

    # 실습 예제 4)
    # 여아 신생아 몸무게의 평균 검정 수행 babyboom.csv
    # 여아 신생아의 몸무게는 평균이 2800(g)으로 알려져 왔으나 이보다 더 크다는 주장이 나왔다.
    # 표본으로 여아 18명을 뽑아 체중을 측정하였다고 할 때 새로운 주장이 맞는지 검정해 보자.
    
    # 귀무 : 여아 신생아 몸무게의 평균은 2800(g)이다.
    # 대립 : 여아 신생아 몸무게의 평균은 2800(g)이 아니다.
    
    babyData = pd.read_csv('../testdata/babyboom.csv')
    print(babyData.head(3))
    # print(babyData.describe())
    fdata = babyData[babyData.gender == 1] # 여아는 1, 남아는 2로 가정
    print(fdata, ' ', len(fdata))
    # print(fdata.describe())
    print(np.mean(fdata.weight)) # 3132.44 vs 2800 차이?
    
    # 정규분포 확인
    # sns.distplot(fdata.iloc[:,2], kde=True)
    # plt.show()
    
    # stats.probplot(fdata.iloc[:,2], plot=plt) # Q-Q plot
    # plt.show()
    
    # print('정규성 :', stats.shapiro(fdata.iloc[:,2])) # pvalue=0.017984 < 0.05 이므로 정규성 만족 못함. 데이터에 문제가 있을 수 있으나 공부 중이니 그대로 진행.
    
    result4 = stats.ttest_1samp(fdata.weight, popmean = 2800)
    print('result4 : statistic(t-value) : {}, p-value : {}'.format(result4[0], result4[1]))
    # p-value : 0.03926 < 0.05 이므로 귀무가설 기각. 여아 신생아 몸무게의 평균은 2800(g)이 아니다.
    # ... 증가해서 뭐가 어쩌구 저쩌구...
    
    
    <console>
       time  gender  weight  minutes
    0     5       1    3837        5
    1   104       1    3334       64
    2   118       2    3554       78
        time  gender  weight  minutes
    0      5       1    3837        5
    1    104       1    3334       64
    5    405       1    2208      245
    6    407       1    1745      247
    12   814       1    2576      494
    13   909       1    3208      549
    15  1049       1    3746      649
    16  1053       1    3523      653
    21  1406       1    3430      846
    22  1407       1    3480      847
    23  1433       1    3116      873
    24  1446       1    3428      886
    28  1742       1    2184     1062
    30  1825       1    2383     1105
    36  2010       1    3500     1210
    41  2217       1    3866     1337
    42  2327       1    3542     1407
    43  2355       1    3278     1435   18
    3132.4444444444443
    result4 : statistic(t-value) : 2.233187669387536, p-value : 0.03926844173060218

    검정만으로 끝나는 것이 아니라, 검정의 결과를 바탕으로 무언가를 설명할 수 있어야 된다.

     

     

     

    댓글

Designed by Tistory.