・お題:Pythonを使ってt検定してみたい。pingouinという統計のライブラリを使ってみたい。
・統計といえばR、というイメージがあるが、今回はPythonで統計をやってみたい。また、Scipyではなく、pingouinというライブラリ(以下リンクを参照。pip install pingouinでインストール)に関して、少し学びたい。
・とりあえずお題として選んだのは、2群間の平均値の差を比較する検定。2群間の平均値が独立で、正規分布を仮定できるとしておく(等分散性はいったん置いておく)。
・学生時代に統計学で習った流れからは外れていて当時の先生に申し訳ない限りだけれど、個人的には、2群間の平均値を統計にかける際、分布をざっくり見て余程はっちゃけている(正規分布っぽくない)場合を除き、とりあえずwelchに投げるイメージがある。別種であれ検定を繰り返しかけて等分散性を確認してから平均値を検定するのも違和感があるためで、それならば、等分散性の仮定が必要ないwelchに投げた方が良いかなぁと考えている(考え方がおかしかったらごめんなさい)。
・とりあえず、データセットを作成する。
import numpy as np
import pandas as pd
np.random.seed(12)
a=np.random.normal(10,1,10)
b=np.random.normal(11,1,10)
df=pd.DataFrame({"A":a, "B":b})
・ちなみに、プロットすると以下のような感じ。
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(3,4))
df_melt=df.melt(var_name="Sample",value_name="Score")
sns.stripplot(x="Sample",y="Score",data=df_melt,color="gray")
sns.barplot(x="Sample",y="Score",data=df_melt,color="skyblue",ci=None)
・pingouinでt検定してみる。
import pingouin as pg
pg.ttest(df.A,df.B,correction=True)#welch's t-test
で、以下が一気に出力された。
・同様の検定を、scipyでやってみる。
from scipy import stats
stats.ttest_ind(df.A, df.B, equal_var=False)#welch's t-test
で、以下が出力された。
Ttest_indResult(statistic=-2.2411493358293613, pvalue=0.03869369834107416)
同じような結果になった。
・ちなみに、等分散性を仮定してstudent's t-testもやってみる。
pg.ttest(df.A,df.B,correction=False)#student's t-test
stats.ttest_ind(df.A, df.B, equal_var=True)#student's t-test
Ttest_indResult(statistic=-2.2411493358293613, pvalue=0.037861885773707485)
やっぱり同じような結果になった。
・ pingouinの方が一連の結果をずらっと返してくれる。他にも多種多様な解析手法が搭載されているので、いろいろ使ってみたい。
・まずは統計の勉強をちゃんとやらなきゃなぁ、、と思った。
おわり