ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • t-test 검정 문제(1) 정규성 확인
    Python 데이터 분석 2022. 11. 8. 17:14

     

    [two-sample t 검정 : 문제1] 

    다음 데이터는 동일한 상품의 포장지 색상에 따른 매출액에 대한 자료이다. 

    포장지 색상에 따른 제품의 매출액에 차이가 존재하는지 검정하시오.

       blue : 70 68 82 78 72 68 67 68 88 60 80

       red : 60 65 55 58 67 59 61 68 77 66 66

     

    작성자 코드

    # [two-sample t 검정 : 문제1] 
    # 다음 데이터는 동일한 상품의 포장지 색상에 따른 매출액에 대한 자료이다. 
    # 포장지 색상에 따른 제품의 매출액에 차이가 존재하는지 검정하시오.
    
    import numpy as np
    import scipy.stats as stats
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 귀무 : 포장지 색상에 따른 제품의 매출액에 차이가 없다.
    # 대립 : 포장지 색상에 따른 제품의 매출액에 차이가 있다.
    
    blue = [70, 68, 82, 78, 72, 68, 67, 68, 88, 60, 80]
    red = [60, 65, 55, 58, 67, 59, 61, 68, 77, 66, 66]
    
    print(np.mean(blue), ' ', np.mean(red)) # 72.8181 vs 63.81818
    
    print(stats.shapiro(blue)) # pvalue=0.51023 > 0.05 이므로 정규성 만족
    print(stats.shapiro(red))  # pvalue=0.53479 > 0.05 이므로 정규성 만족
    
    two_sample = stats.ttest_ind(blue, red) # 두 개의 표본에 대한 t-test 실시
    print(two_sample)
    # Ttest_indResult(statistic=2.9280203225212174, pvalue=0.008316545714784403
    # 해석 : pvalue = 0.00831 < 0.05 이므로 귀무 기각.  포장지 색상에 따른 제품의 매출액에 차이가 있다.
    
    
    
    
    <console>
    72.81818181818181   63.81818181818182
    ShapiroResult(statistic=0.9391219615936279, pvalue=0.5102316737174988)
    ShapiroResult(statistic=0.9412071704864502, pvalue=0.534792423248291)
    Ttest_indResult(statistic=2.9280203225212174, pvalue=0.008316545714784403)

     

    다른 방법 코드

    import numpy as np
    import scipy.stats as stats
    import pandas as pd
    import matplotlib.pyplot as plt
    from numpy import average
    
    # [two-sample t 검정 : 문제1] 
    # 다음 데이터는 동일한 상품의 포장지 색상에 따른 매출액에 대한 자료이다. 
    # 포장지 색상에 따른 제품의 매출액에 차이가 존재하는지 검정하시오.
    
    blue = [70, 68, 82, 78, 72, 68, 67, 68, 88, 60, 80]
    red = [60, 65, 55, 58, 67, 59, 61, 68, 77, 66, 66]
    
    # 귀무 : 동일한 상품의 포장지 색상에 따른 제품의 매출액 차이가 없다.
    # 대립 : 동일한 상품의 포장지 색상에 따른 제품의 매출액 차이가 있다.
    
    print(average(blue), ' ', average(red))   # 72.81  63.81  
    print(72.81 - 63.81)   # 차이 : 9.0
    two_sample1 = stats.ttest_ind(blue, red)  # 두 개의 표본에 대한 t-test 실시
    print(two_sample1) # statistic=2.9280203225212174, pvalue=0.008316545714784403
    #===========================================================================================
    # 해석 : pvalue=0.00831 < 0.05 보다 작으므로 귀무가설 기각. 동일한 상품의 포장지 색상에 따른 제품의 매출액 차이가 있다.
    #===========================================================================================
    
    
    <console>
    72.81818181818181   63.81818181818182
    9.0
    Ttest_indResult(statistic=2.9280203225212174, pvalue=0.008316545714784403)

     

     

     

    [two-sample t 검정 : 문제2]  

    아래와 같은 자료 중에서 남자와 여자를 각각 15명씩 무작위로 비복원 추출하여 혈관 내의 콜레스테롤 양에 차이가 있는지를 검정하시오.

      남자 : 0.9 2.2 1.6 2.8 4.2 3.7 2.6 2.9 3.3 1.2 3.2 2.7 3.8 4.5 4 2.2 0.8 0.5 0.3 5.3 5.7 2.3 9.8

      여자 : 1.4 2.7 2.1 1.8 3.3 3.2 1.6 1.9 2.3 2.5 2.3 1.4 2.6 3.5 2.1 6.6 7.7 8.8 6.6 6.4

     

    랜덤으로 15개를 뽑아야 하기 때문에 random 함수를 사용한다.

     

    # [two-sample t 검정 : 문제2]  
    # 아래와 같은 자료 중에서 남자와 여자를 각각 15명씩 무작위로 비복원 추출하여 혈관 내의 콜레스테롤 양에 차이가 있는지를 검정하시오.
    
    # 귀무 : 혈관 내의 콜레스테롤 양에 차이가 없다.
    # 대립 : 혈관 내의 콜레스테롤 양에 차이가 있는 있다.
      
    man = [0.9, 2.2, 1.6, 2.8, 4.2, 3.7, 2.6, 2.9, 3.3, 1.2, 3.2, 2.7, 3.8, 4.5, 4, 2.2, 0.8, 0.5, 0.3, 5.3, 5.7, 2.3, 9.8]
    woman = [1.4, 2.7, 2.1, 1.8, 3.3, 3.2, 1.6, 1.9, 2.3, 2.5, 2.3, 1.4, 2.6, 3.5, 2.1, 6.6, 7.7, 8.8, 6.6, 6.4]
    
    import random
    random.seed(123)
    man = random.sample(man, 15)     # 무작위로 15명 비복원 추출
    woman = random.sample(woman, 15) # 무작위로 15명 비복원 추출
    
    print(np.mean(man), ' ', np.mean(woman)) # 3.22 vs 3.27
    
    print(stats.shapiro(man))    # pvalue=0.0376 < 0.05 이므로 정규성 불만족
    print(stats.shapiro(woman))  # pvalue=0.0014 < 0.05 이므로 정규성 불만족
    
    # two_sample2 = stats.ttest_ind(man, woman) # 두 개의 표본에 대한 t-test 실시, 정규성 만족이 아니기 때문에 이 방법은 안 된다.
    # print(two_sample2)
    
    print(stats.wilcoxon(man, woman)) # 정규성 만족이 안 될 때 이 방법을 사용한다.
    # statistic=59.0, pvalue=0.97796630859375
    # 해석 : pvalue=0.97796 > 0.05 이므로 귀무 채택. 혈관 내의 콜레스테롤 양에 차이가 없다.
    
    
    
    
    <console>
    3.220000000000001   3.273333333333334
    ShapiroResult(statistic=0.873214602470398, pvalue=0.0376255065202713)
    ShapiroResult(statistic=0.7687029838562012, pvalue=0.0014988253824412823)
    WilcoxonResult(statistic=59.0, pvalue=0.97796630859375)

    중요! 정규성 불만족일 경우에는 stats.wilcoxon() 함수를 사용하여 pvalue를 계산한다. 불만족이 나올 수도 있으니 정규성 검사는 꼭 필요하다.

     

    정규성을 만족하지 않는 경우 두 가지 방법이 있다.

    result2 = stats.wilcoxon(sco1, sco2)
    result2 = stats.mannwhitneyu(sco1, sco2)

    댓글

Designed by Tistory.