python PR

【Pythonで統計学】t検定のかけ方〜サンプルコード付き〜

python 統計学 t検定
記事内に商品プロモーションを含む場合があります

統計学と言えばt検定が有名かと思います

しかしt検定にはいくつか種類があり、かけるt検定によって、結果の解釈がかわってきます

今回はt検定の選び方とPythonでt検定をかける方法について解説をしていきたいと思います

これまでの【Pythonで統計学】シリーズ同様に、csvから読み込んだデータをt検定にかけていきたいと思います

pythonで統計学を学ぶ流れは以下の記事を参考にしてください

python 統計学
pythonで統計学を学ぶメリット〜実際の学習手順を紹介〜近年、データサイエンティストの需要が高まってきていますが、データサイエンティスト必須能力として、「プログラミング言語」「統計学」が挙げられています。pythonで統計学を扱えれば、データサイエンティストとしての道も開けるでしょう。今回はpythonで統計学を学ぶメリットや実際にどのように学習していくべきかを解説していきたいと思います。...

t検定とは

t検定とは、パラメトリック検定の一種で、データの対応の有無に応じて、統計手法がかわります

pythonではt検定を行う場合にはscipyを使用します

  • stats.ttest_rel:対応のある2標本t検定
  • stats.ttest_ind:対応のないt検定

と大きくわけると、2種類のt検定があります

まずはそれぞれの特徴について確認していきます

対応のある2標本t検定

対応のある2標本t検定は、2つのデータが対応しており、正規分布している場合に用います

データが対応しているのというのは、同一人物からデータを複数回測定する、ということです

例えば、ダイエットを始めたAさんのダイエットを始めた日の体重とダイエットを始めて1ヶ月後のデータを比較したい場合や、

薬を飲み始めた日の血圧と薬を飲み始めてから1ヶ月後の血圧の変化を比較したい場合などが、対応のあるデータになります

対応のある2標本t検定をかける手順

対応のある2標本t検定をかける前提として、

  • 2群が対応している
  • 正規分布している

という必要があります

正規分布については、以下の記事を参考にしてください

python 正規性の検定
【pythonで統計学】正規性の検定(シャピロウィルク検定etc)のかけ方~サンプルコード付き~t検定などの統計手法をかける場合には、まずそのデータが正規分布しているかを調べなくてはいけません。正規性を確認する方法の一つに、ヒストグラムを書いて目視で確認する、という方法がありますが、これだけでは正確ではありません。 そこで、「Q-Qプロット」や「シャピロウィルク検定」「コルモゴロフスミルノフ検定」などを使用して、正規性を確認していきます。 実際に統計をかける場合には、csvやexcelデータなどを読み込んで、統計にかけることが多いと思います。そこで今回は、pythonを使ってcsvから取り込んだデータで正規性の検定を行う方法について、解説していきたいと思います。...

pythonで対応のある2標本t検定をかけてみる

では実際に対応のある2標本t検定をかけていきたいと思います

scipyのstats.ttest_relを使用します

scipy.stats.ttest_rel(a, b, axis=0, nan_policy='propagate', alternative='two-sided')

「 alternative=’two-sided’」は両側検定の意味になります

片側検定を行う場合には、 alternative=’less’もしくは’greater’を使用すれば行うことができます

「nan-policy」は欠損値(NaN)がある場合に、どういった処理を行うかを設定します

  • propagate:nanを返す
  • raise:エラーをスルーする
  • omit:nan:値を無視して計算を実行

pythonでは欠損値があっても、統計をかけることが可能ですが、データ前処理の段階で欠損値はどうにかしておくべきだと思います

a,bにはそれぞれの値を入力します

今回はcsvから取り込んだデータをa,bに入力していきます

サンプルコードは以下になります

今回はe-statで無料配布されているcsvデータを利用して統計処理を行なっていきたいと思います

統計用サンプルデータ修正

下から2行は不要なので、あらかじめ削除してから統計処理を行なっていきます

def twottest():
    type = [("all file","*")]    # 読み取るファイルをcsvに絞り込む。
    file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
    stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)

    A_list=stasticsdata.iloc[:,2]
    A=list(A_list)
    B_list=stasticsdata.iloc[:,3]
    B=list(B_list)
        
    result=stats.ttest_rel(A, B, axis=0, nan_policy='propagate', alternative='two-sided')
    text.insert(tk.END,stasticsdata.describe())
    listbox1.insert(tk.END,"p=%.3f" %(result.pvalue))

iloc[:,2]で2列目のデータを
iloc[:,3]で3列目のデータをA,Bに代入しています

ilocの数値を変えることで、好きな列のデータを統計処理にかけることができます

これでcsvから読み込んだ好きな列のデータを対応のある2標本t検定にかけることができます

対応のないt検定

対応のないt検定とは独立している2つのデータに差があるかどうかを比較するものです

  • 例えば、BMIが20以下の人と21以上の人で、血圧に違いがあるか?
  • 運動をしている人としていない人で血圧に差があるか?

などを比較する場合に、対応のないt検定を用います

一つ注意しておくのが、対応のないt検定には2種類あります

  • スチューデントのt検定
  • ウェルチのt検定

両者の違いは分散が等しいかどうか(等分散を仮定できる・できない)の違いになります

等分散の確認はF検定、ルビーンの検定で確認することができます

詳細は以下の記事を確認してください

python 等分散性の検定
【pythonで統計学】等分散性の検定について(ルビーン検定・バートレット検定)t検定などの検定を行う上で等分散性は確認しないと、用いる検定手法を誤ってしまうことがあります。等分散性の検定は代表的なものにF検定と呼ばれるものがあり、そのほかルビーン検定とバートレット検定あります。今回はpythonで等分散性の検定を行う方法について解説していきたいと思います。 これまでの【pythonで統計学】と同様に、csvから読み込んだデータを等分散性の検定にかける方法ですので、ぜひ参考にしてみてください...

等分散が仮定できる場合には、スチューデントのt検定

等分散が仮定できない場合には、ウェルチのt検定を用います

対応のないt検定をかける手順

対応のないt検定をかける場合には、

  • 正規分布している
  • 2つのデータが独立している(別々の人たちから測定している)
  • 等分散している→スチューデントのt検定
  • 等分散していない→ウェルチのt検定

という流れになります

スチューデントのt検定をかけてみる

では実際にスチューデントのt検定をかけていきます

コードは以下のようになります

scipy.stats.ttest_ind(a, b, axis=0, equal_var=True, nan_policy='propagate', permutations=None, random_state=None, alternative='two-sided', trim=0)

対応のある2標本t検定と同様、

「 alternative=’two-sided’」は両側検定の意味になります

片側検定を行う場合には、 alternative=’less’もしくは’greater’を使用すれば行うことができます

  • less:片側検定(少ないor低い)
  • greater:片側検定(大きいor高い)

「nan-policy」は欠損値(NaN)がある場合に、どういった処理を行うかを設定します

  • propagate:nanを返す
  • raise:エラーをスルーする
  • omit:nan:値を無視して計算を実行

ではcsvデータを取り込んで、対応のないt検定(スチューデントのt検定)をかけていきます

def ttest():
    type = [("all file","*")]    # 読み取るファイルをcsvに絞り込む。
    file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
    stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)

    A_list=stasticsdata.iloc[:,2]
    A=list(A_list)
    B_list=stasticsdata.iloc[:,3]
    B=list(B_list)
    
    result=stats.ttest_ind(A, B, alternative='two-sided')
    text.insert(tk.END,stasticsdata.describe())
    listbox1.insert(tk.END,"p=%.3f" %(result.pvalue))

「equal_var=True」はデフォルトでTrueになっているので、Trueの場合は記載しなくてもOKです

ウェルチのt検定をかけてみる

次に等分散が等しくないと仮定した場合のウェルチのt検定をかけていきます

基本的にはスチューデントのt検定を同じ流れになります

サンプルコードはこちらです

def welchtest():
    type = [("all file","*")]    # 読み取るファイルをcsvに絞り込む。
    file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
    stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)
 
    A_list=stasticsdata.iloc[:,2]
    A=list(A_list)
    B_list=stasticsdata.iloc[:,3]
    B=list(B_list)
    
    result=stats.ttest_ind(A, B, alternative='two-sided',equal_var=False)
    text.insert(tk.END,stasticsdata.describe())
    listbox1.insert(tk.END,"p=%.3f" %(result.pvalue))

スチューデントのt検定とウェルチのt検定の違いは「equal_var=True」「equal_var=False」かです

equal_varを変えるだけで、対応のないt検定を2種類使うことが可能です

まとめ

  • t検定にはいくつか種類がある
  • 対応のある2標本検定はstats.ttest_relを使用する
  • 対応がなく等分散を仮定できる場合にはstats.ttest_ind
  • 対応がなく等分散を仮定できない場合にはstats.ttest_ind(equal_var=False)とする

統計学を学んだ書籍一覧

おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.