t検定などの検定を行う上で等分散性は確認しないと、用いる検定手法を誤ってしまうことがあります
等分散性の検定は代表的なものにF検定と呼ばれるものがあり、そのほかよく使われるものに以下の2つがあります
- ルビーン検定:2群以上の等分散性を確認
- バートレット検定:2群以上の等分散性を確認(正規性を仮定できる場合)
今回はpythonで等分散性の検定を行う方法について解説していきたいと思います
これまでの【pythonで統計学】と同様に、csvから読み込んだデータを等分散性の検定にかける方法ですので、ぜひ参考にしてみてください
pythonで統計学を学ぶ流れは以下の記事を参考にしてください
Contents
等分散性の検定とは
等分散性の検定とは、母集団間や因子水準間の分散の同等性を検定するものです
- 帰無仮説:各群の母分散は等しい(母分散に差はない)
- 対立仮説:各群の母分散は異なる(母分散に差がある)
ということになります
p値<有意水準α
であった場合には、帰無仮説を棄却して対立仮説を採択します
なので、各群の母分散は異なる、となります
分散とは
分散というのは、データの散らばり具合を表しています
さらにいうと、分散はデータの平均値の偏差の2乗になります
そのため、基本的にはパラメトリック検定でしか用いないものだと考えています
2群間の分散が等しくない、ということは、2群のデータが散らばっていると言い換えられます
データが散らばっているものと、散らばっていないものを比較してしまうと、異なる結果になるため、等分散性を確認する検定が必要になってきます
pythonで等分散性の検定を行う
pythonで等分散性の検定を行う場合には、scipy.statsを使用します
今回はe-statで無料配布されているデータセットを用いて正規性の検定をかけていきたいと思います
下から2行は不要なので、削除して使用をします
pythonでルビーン検定をかける
pythonでルビーン検定をかける場合には、以下のように記載をします
scipy.stats.levene(A,B)
A,Bには該当するデータを入力すればOKです
csvから読み込んだデータを使用する場合には、以下のようにします
def levenetest():
type = [("all file","*")]
file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())
stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)
#list化
A_list=stasticsdata.iloc[:,2]
A=list(A_list)
B_list=stasticsdata.iloc[:,3]
B=list(B_list)
result=stats.levene(A, B, center='mean')
listbox1.insert(tk.END,"p=%.3f" %(result.pvalue))
bloc[:,○]でルビーン検定にかけたいデータの列数を指定すれば、csvで取り込んだデータを検定にかけることができます
また統計にかけたいデータ数が増えた場合には、list化より下を増やせば、多群間で検定をかけることが可能です
pythonでバートレットの検定をかける
冒頭でも記載したように、バートレットの検定は正規分布に従っている場合に使うのが好ましいです
これは正規分布に従わない標本では均一かどうかよりも、非正規性を検出する傾向があるためです
正規性の確認は以下の記事を参考にしてください
pythonでバートレットの検定を使用する場合には、以下のように入力をします
scipy.stats.bartlett(A,B)
csvから読み込んだデータを使用する場合には、以下のようにします
def levenetest():
type = [("all file","*")]
file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())
stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)
#list化
A_list=stasticsdata.iloc[:,2]
A=list(A_list)
B_list=stasticsdata.iloc[:,3]
B=list(B_list)
result=stats.bartlett(A, B, center='mean')
listbox1.insert(tk.END,"p=%.3f" %(result.pvalue))
bloc[:,○]でバートレット検定にかけたいデータの列数を指定すれば、csvで取り込んだデータを検定にかけることができます
また統計にかけたいデータ数が増えた場合には、list化より下を増やせば、多群間で検定をかけることが可能です
まとめ
- pythonでの等分散性の検定について
- pythonではルビーン検定とバートレットの検定が使える
- バートレットの検定は正規分布している場合に用いる