- Step3. 実践編
- 2. 推定と検定
2-1. 対応のない2標本t検定
次のデータは、「Step0. 初級編 1-1. データをとってみよう」で用いたデータです。このデータを使って、性別間での体長のちがいについてt検定を行ってみましょう。
ファイルのダウンロードはこちらから
- (日本語)neko_1nensei.csv
- (英語)neko_1nensei_eng.csv
■Excelによる解析例
- 「neko_1nensei.csv」のデータの加工を行うため、フィルター機能を有効にする(データ > 「フィルター」をクリック)
- 「性別」の下向き矢印をクリック > 「オス」を選択 > 「OK」をクリック
- 「オス」の体長データをコピー > コピーしたデータを別シートに貼り付け
- 「メス」の体長データも同様に抽出し、「オス」の体長データの隣に貼り付け
- データ > データ分析 > t検定:分散が等しくないと仮定した2標本による検定を選択 > [OK]をクリック
- 「入力元」と「出力オプション」を図のように設定
- t検定の結果が出力される
※「データ分析」が見当たらない方はこちらを参考に設定を行ってください。
※この結果から、オスの体長の平均は31.9cm、メスの体長の平均は31.0cmであることが分かります。性別による体長は統計量t=2.029を用いた検定の結果、P=0.046となり、有意水準5%の両側検定において、オスのほうが体長が大きいと結論付けられます。
■Rによる解析例
この検定では、2標本の等分散を仮定しないWelchのt検定(両側検定)を行います。
library(dplyr) dat <- read.csv("neko_1nensei_eng.csv", header=T) head(dat) #データの確認(データの先頭6行を表示) #性別それぞれのデータを抽出しない場合 t.test(dat$length~dat$sex) #「~(チルダ)」を使ってsexによるlengthのちがいを検定 #性別それぞれのデータを抽出する場合 male <- dat %>% dplyr::filter(sex=="male") #maleのデータを抽出 female <- dat %>% dplyr::filter(sex=="female") #femaleのデータを抽出 t.test(male$length, female$length) #maleとfemaleのlengthデータを検定
・オプションについて
項目 | オプション |
---|---|
片側検定を行う | t.test(dat$length~dat$sex, alternative="less") もしくは t.test(dat$length~dat$sex, alternative="more") |
対応のある検定を行う | t.test(dat$length~dat$sex, paired = T) |
2標本の等分散を仮定する | t.test(dat$length~dat$sex, var.equal =T) |
■Pythonによる解析例
import pandas as pd import scipy as sp from scipy import stats dat = pd.read_csv("neko_1nensei_eng.csv") male=dat[dat["sex"] == "male"] #maleのデータを抽出 female=dat[dat["sex"] == "female"] #femaleのデータを抽出 t, p = stats.ttest_ind(male["length"], female["length"], equal_var=False) #maleとfemaleのlengthデータを検定し、t値とP値を抽出 print(f't = {t:.3f}') print(f'P = {p:.3f}')
・オプションについて
項目 | オプション |
---|---|
片側検定を行う | stats.ttest_ind(male["length"], female["length"], alternative="less") もしくは stats.ttest_ind(male["length"], female["length"], alternative="greater") |
対応のある検定を行う | stats.ttest_rel(male["length"], female["length"]) |
2標本の等分散を仮定する | stats.ttest_ind(male["length"], female["length"], equal_var=True) |