pythonでのTチェック

2890 ワード

pythonでは、検査はscipyを呼び出すことが多い.statsによる計算(公式ドキュメント:https://docs.scipy.org/doc/scipy/reference/stats.html#module-scipy.stats)
T検査も3つのブロックに分かれています.
  • 単一サンプルT検査
  • 独立サンプルT検査
  • ペアサンプルT検査
  • 1、まず単一サンプルT検査について、numpyによっていくつかの正規分布のデータを生成して、それから単一サンプルT検査を見て
    from scipy import stats
    import numpy as np
    
    # MEAN  0,STD  1 100   
    data = np.random.normal(loc=0, scale=1, size=100)
    
    print(stats.ttest_1samp(data, 0))
    print(stats.ttest_1samp(data, 1))
    

    実行結果は次のとおりです.
    Ttest_1sampResult(statistic=-0.6863184685001024, pvalue=0.4941166024877156)
    Ttest_1sampResult(statistic=-11.4099277678686, pvalue=9.488883450940155e-20)
    

    データ平均値と0のp値は0.05より大きく,差は顕著ではなかった.データ平均値と1のp値は0.05未満で有意差があった.
    2、独立サンプルT検査に対して、直接検査することはできない.まず分散性を保証しなければならない.すなわち、まず分散性検査をしなければならない.よく見られる分散性検査にはleveneとbartlettがある.
    data1 = np.random.normal(loc=0, scale=1, size=100)
    data2 = np.random.normal(loc=1, scale=1, size=100)
    
    print(stats.bartlett(data1, data2))
    print(stats.levene(data1, data2))
    ----
    #     
    BartlettResult(statistic=0.008704833109176064, pvalue=0.9256654742880931)
    LeveneResult(statistic=0.13570809823548327, pvalue=0.7129791411980255)
    

    分散が同じ2つのデータp値が大きく、有意差はなく、独立したサンプルTを直接使用して検査することができる.
    print(stats.ttest_ind(data1, data2))
    ----
    #     
    Ttest_indResult(statistic=-8.746508944155257, pvalue=9.52763110388834e-16)
    

    生成されたmean値は異なり,std値が同じ一対のデータに有意差があった.
    分散不整のデータについてはT’検査(近似T検査)が必要である
    実際にはttest_ind関数にequalを追加var=FalseパラメータはT’検査となり、ここでFalseに設定するとStudent’s t-testではなくWelch’s t-testが行われる.
    data1 = np.random.normal(loc=0, scale=1, size=100)
    data2 = np.random.normal(loc=0, scale=2, size=100)
    
    print(stats.bartlett(data1, data2))
    print(stats.levene(data1, data2))
    
    print(stats.ttest_ind(data1, data2, equal_var=False))
    ----
    #     
    BartlettResult(statistic=48.86476955207111, pvalue=2.7423257937347823e-12)
    LeveneResult(statistic=39.662356907852576, pvalue=1.911540051191041e-09)
    Ttest_indResult(statistic=-0.29010850521153353, pvalue=0.7721554482009412)
    

    以上のように分散には有意差があるが,データ差は有意ではない.分散の不均一なデータについて、T検査を直接行うと、p値が小さくなり、顕著な結果になる傾向があります.
    data1 = np.random.normal(loc=0, scale=1, size=100)
    data2 = np.random.normal(loc=0, scale=2, size=100)
    
    print(stats.bartlett(data1, data2))
    print(stats.levene(data1, data2))
    
    print(stats.ttest_ind(data1, data2, equal_var=False))
    print(stats.ttest_ind(data1, data2))
    ----
    #     
    BartlettResult(statistic=27.356888446192123, pvalue=1.6916077351795814e-07)
    LeveneResult(statistic=23.457560950408478, pvalue=2.5699985012691294e-06)
    Ttest_indResult(statistic=-1.1305945233688985, pvalue=0.2599245194382134)
    Ttest_indResult(statistic=-1.1305945233688985, pvalue=0.25959342786776923)
    

    3、ペアリングサンプルT検査
    まず、2つのサンプルが関連するサンプルであることを確認し、次のように検査すればいいです.
    stats.ttest_rel(data1, data2)