scipy.stats: 関連2標本の平均値の差の検定 ttest_rel, ttest_1samp
1. テストデータの生成
import numpy as np
x = np.array([63.6, 62.9, 41.1, 54.0, 45.0, 39.8, 62.4, 37.8, 45.5, 47.9])
y = np.array([69.7, 50.2, 48.7, 59.4, 52.8, 54.9, 76.9, 66.4, 50.1, 48.8])
2. 関連2標本の平均値の差の検定 ttest_rel
from scipy.stats import ttest_rel
ttest_rel(a, b, axis=0, nan_policy='propagate', alternative='two-sided')
デフォルトで両側検定である。特に指定するなら alternative='two-sided'
を指定する。
帰無仮説は「2 つの対応のある標本の母平均は等しい」である。
戻り値は $t$ 統計量と $p$ 値である。
ttest_rel(x, y)
Ttest_relResult(statistic=-2.3166916999976834, pvalue=0.045732821155958746)
帰無仮説が「最初に指定したデータの母平均のほうが小さい」という片側検定の場合には,alternative='less'
を指定する。
$p$ 値は,両側検定の場合の 1/2 になる。
ttest_rel(x, y, alternative='less')
Ttest_relResult(statistic=-2.3166916999976834, pvalue=0.022866410577979373)
帰無仮説が「最初に指定したデータの母平均のほうが大きい」という片側検定の場合には,alternative='greater'
。
なお,テストデータは alternative='less'
の例なので,'greater' を指定すると $p$ 値は 0.5 以上になる。
ttest_rel(x, y, alternative='greater')
Ttest_relResult(statistic=-2.3166916999976834, pvalue=0.9771335894220207)
3. 1標本の母平均の検定 ttest_1samp
対応のある2標本データの差を計算して,ttest_1samp
で検定することもできる。この場合は,「観察データが指定した母平均を持つといえるか」という検定になるので,母平均を popmean
で指定しなければならない。
popmean
はデフォルト値がないので,必ず指定しなければならない。
「対応のある2標本データの平均値の差の検定」では,帰無仮説を「差がない」とすることが多いので,それに対しての「1標本の母平均の検定」では popmean=0
を指定することになろう。
しかし,ttest_1samp
で popmean
を指定できるのは,ttest_rel
よりも優れている。ttest_rel
は平均値の差は 0 と決めつけていて変更できないからである(多くの統計パッケージでは,「対応のある2標本データの平均値の差の検定」の場合にも,平均値の差の指定ができる)。
from scipy.stats import ttest_1samp
ttest_1samp(a, popmean, axis=0, nan_policy='propagate', alternative='two-sided')
diff = x - y
print('mean(x) = ', x.mean(), ' mean(y) = ', y.mean(), ' mean(diff) = ', diff.mean())
mean(x) = 50.0 mean(y) = 57.79 mean(diff) = -7.790000000000004
差を求めて ttest_1samp
で検定する。帰無仮説は「差の母平均は 0 である」。これは,「元の対応のある 2 標本の平均値の差は 0 である」と同じことである。
特に指定しなければ両側検定(alternative='two-sided
)が行われる。
戻り値は $t$ 統計量と $p$ 値である。
ttest_1samp(diff, popmean=0)
Ttest_1sampResult(statistic=-2.3166916999976834, pvalue=0.045732821155958746)
帰無仮説が「母平均は popmean
より小さい」ならば,alternative='less'
を指定する。
$p$ 値は両側検定の 1/2 になる。
ttest_1samp(diff, popmean=0, alternative='less')
Ttest_1sampResult(statistic=-2.3166916999976834, pvalue=0.022866410577979373)
帰無仮説が「母平均は popmean
より大きい」ならば,alternative='greater'
を指定する。
実際のデータが帰無仮説と逆になっていれば,$p$ 値は 0.5 より大きくなる。
ttest_1samp(diff, popmean=0, alternative='greater')
Ttest_1sampResult(statistic=-2.3166916999976834, pvalue=0.9771335894220207)
当然ながら popmean
は 0 でなくてもよい。
例題では平均値の差は -7.79 であるが,もし帰無仮説が「母平均は -6 である(両側検定)」ならば,「そういうことはよく起きること」なので,$p$ 値は 0.05 より大きくなり,帰無仮説は棄却できないということになる。
ttest_1samp(diff, popmean=-6)
Ttest_1sampResult(statistic=-0.5323335228492759, pvalue=0.6073847139443715)