scipy.stats: 独立2標本の平均値の差の検定 ttest_ind
1. 関数定義
`ttest_ind(a, b, axis=0, equal_var=True, nan_policy='propagate', permutations=None, random_state=None, alternative='two-sided', trim=0)
あまり使われない引数もあるので,一応説明を加えておく。
- equal_var : 等分散を仮定するか?
デフォルトはTrue
で,二群の分散が等しいと仮定する検定を行う。False
を指定することで,二群の等分散を仮定しない Welch の方法による検定を行う。 - nan_policy :
nan
の取り扱いかた
- 'propagate': 結果として
nan
を返す - 'raise': エラーを発生させる
- 'omit':
nan
を除いたデータで検定する
- 'propagate': 結果として
- permutations : 並べ替え検定
0 または None (デフォルト) の場合,並べ替え検定は行わず,$p$ 値の計算に $t$ 分布を使用する。
整数値を指定した場合は並べ替えを行う回数として扱われる。この回数が,$k$:一方のサンプルサイズ,$n$が全体のサンプルサイズとしたときの組み合わせの数 ${}_nC_k$ 以上の場合は,正確な検定(exact test)を行う。 - alternative : 両側検定,片側検定の種別
- 'two-sided' 両側検定
- 'less' 片側検定(最初に指定したデータの母平均値が二番目に指定したデータの母平均値より小さい)
- 'greater': 片側検定(最初に指定したデータの母平均値が二番目に指定したデータの母平均値より大きい)
- trim : トリムデータを使うか?
[0, 0.5) で指定した割合で,データの小さい方と大きい方から取り除いたデータで検定を行う(Yuen's t-test)。デフォルトは 0(トリム無しで,すべてのデータを使う)。
戻り値は $t$ 統計量と $p$ 値である。
2. テストデータの生成
import numpy as np
def gen(n, m=50, s=10, decimals=1):
return np.around(np.random.normal(m, s, n), decimals=decimals)
np.random.seed(123)
x = gen(11)
print(*x, sep=', ')
y = gen(13, m=55.1, s=15)
print(*y, sep=', ')
39.1, 60.0, 52.8, 34.9, 44.2, 66.5, 25.7, 45.7, 62.7, 41.3, 43.2
53.7, 77.5, 45.5, 48.4, 48.6, 88.2, 87.9, 70.2, 60.9, 66.2, 77.5, 41.1, 72.7
3. 等分散を仮定するか?
3.1. 等分散を仮定しない場合 -- Welch の方法
equal_var=False
で指定する。常に,この指定で検定を行おう。
from scipy.stats import ttest_ind
ttest_ind(x, y, equal_var=False)
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.006380154142525381)
3.2. 等分散を仮定する場合
デフォルトでは,等分散を仮定する検定になる。これは使わないようにしよう。
ttest_ind(x, y)
Ttest_indResult(statistic=-2.9512037942064135, pvalue=0.0073822752654926745)
4. 並べ替え検定 permutation test
両群のサンプルサイズが $n_1$,$n_2$,$n=n_1+n_2$とする。
両群のデータをプールして(一緒にして),ランダムに $n_1$,$n_2$ 個のデータに分割し,平均値の差の検定を permutations
回行う。
得られる $t$ 検定統計量が,観察されたデータにおける $t$ 統計量より極端な値になる場合の割合を $p$ 値とする。これが並べ替え検定である。
このような並べ替えは $\text{Binom}(n, n_1) = {}nC{n_1}$ 通りある。
例題においては $n_1=11$,$n_2=13$,$n=24$ なので,$\text{Binom}(n, n_1) = 2496144$
from scipy.special import binom
binom(24, 11)
2496144.0
4.1. 並べ替え検定(permutation test)
1 < permutations < 2496144
の場合にはデータをランダムに並べ替えて $t$ 統計量を求めることを permutations
回繰り返し,観察されたデータにおける $t$ 統計量より極端な値が得られた割合を $p$ とする。
したがって,同じ permutations
を指定して複数回検定を行っても,$p$ 値は一致しない。
また,観察されたデータにおける $t$ 統計量と比較するのであるから,当然 equal_var
の指定によって結果は異なる。
ttest_ind(x, y, equal_var=False, permutations=2496143)
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.007176672169823604)
ttest_ind(x, y, equal_var=False, permutations=2496143)
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.007218336449474249)
4.2. 正確な検定(exact test)
permutations ≧ 2496144
が指定された場合は,データのすべての並べ替えを尽くして(2496144個の) $t$ 統計量を求め,観察されたデータにおける $t$ 統計量より極端な値が得られた割合を $p$ 値とする。これは,正確な検定(exact test)である。
ttest_ind(x, y, equal_var=False, permutations=2496144)
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.007235960745854406)
2496144 より大きな値を指定しても 2496144 が指定されたとみなして正確な検定を行う。
ttest_ind(x, y, equal_var=False, permutations=2496145)
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.007235960745854406)
5. 棄却域の設定
5.1. 両側検定
デフォルトで両側検定である(指定するとすれば alternative='two-sided'
)。帰無仮説は「2群の母平均は等しい」である。
ttest_ind(x, y, equal_var=False, alternative='two-sided')
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.006380154142525381)
5.2. 片側検定
帰無仮説が「最初に指定したデータの母平均は,二番目に指定したデータの母平均より小さい」ならば,alternative = 'less'
で指定する。
データ例では,両側検定の場合の $p$ 値の 1/2 になる。
ttest_ind(x, y, equal_var=False, alternative='less')
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.0031900770712626906)
帰無仮説が「最初に指定したデータの母平均は,二番目に指定したデータの母平均より大きい」ならば,alternative = 'greater'
で指定す。
データ例では,最初に指定した平均値のほうが小さいので,alternative = 'greater'
を指定すると $p$ 値は 0.5 より大きくなる。
ttest_ind(x, y, equal_var=False, alternative='greater')
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.9968099229287373)
ttest_ind(x, y, equal_var=False, alternative='greater',nan_policy='omit', permutations=249)
Ttest_indResult(statistic=-3.0162740163873116, pvalue=0.9839357429718876)