Octave で独立 2 標本の平均値の差の検定(t 検定)
独立 2 標本の平均値の差の検定は,2 標本が等分散であることを仮定しない Welch の方法による $t$ 検定 welch_test()
と,等分散を仮定する普通の $t$ 検定 t_test_2()
,ttest2
の三通りある。
検定の多重性を避けるためにも,常に Welch の方法による t 検定を行うことを推奨する。
usage:
[pval, t, df] = welch_test (x, y, alt)
[pval, t, df] = t_test_2 (x, y, alt)
x, y はデータベクトル
alt はデフォルトで両側検定 "!=",片側検定は,帰無仮説が「x の母平均が y の母平均より小さい」なら "<", その逆なら ">" で指定
戻り値を指定しない場合は p 値のみを表示する
pkg load statistics % statistics が必要
format long % 表示精度を高くする(任意)
Welch の方法による t 検定 welch_test()
x = [49.6; 52.5; 48.3; 50.6; 56.7; 32.8; 51.6; 46.1; 54.6; 52.0; 39.3; 49.5; 45.1; 37.1; 63.9;
48.3; 37.4; 33.4; 37.8; 51.2; 63.0; 74.3; 54.4; 60.1; 55.6; 49.3; 57.4; 40.4; 57.8; 60.9];
y = [48.7; 36.8; 51.9; 65.5; 62.6; 57.3; 43.3; 57.7; 61.4; 69.8; 48.0; 37.1; 29.8; 53.6; 49.3;
50.2; 46.1; 50.6; 51.4; 61.0; 50.8; 51.7; 52.4; 57.3; 55.4];
mean(x), mean(y)
ans = 50.36666666666667
ans = 51.98800000000000
welch_test(x, y);
pval: 0.52512
[pval, t, df] = welch_test(x, y);
printf("t = %.5g, df = %d, p value = %.5g\n", t, df, pval)
t = -0.63977, df = 52.2065, p value = 0.52512
[pval, t, df] = welch_test(x, y, "<");
printf("t = %.5g, df = %d, p value = %.5g\n", t, df, pval)
t = -0.63977, df = 52.2065, p value = 0.26256
[pval, t, df] = welch_test(x, y, ">");
printf("t = %.5g, df = %d, p value = %.5g\n", t, df, pval)
t = -0.63977, df = 52.2065, p value = 0.73744
等分散を仮定する t 検定 t_test_2()
[pval, t, df] = t_test_2(x, y);
printf("t = %.5g, df = %d, p value = %.5g\n", t, df, pval)
t = -0.63607, df = 53, p value = 0.52747
[pval, t, df] = t_test_2(x, y, "<");
printf("t = %.5g, df = %d, p value = %.5g\n", t, df, pval)
t = -0.63607, df = 53, p value = 0.26374
[pval, t, df] = t_test_2(x, y, ">");
printf("t = %.5g, df = %d, p value = %.5g\n", t, df, pval)
t = -0.63607, df = 53, p value = 0.73626
等分散を仮定する t 検定 ttest2()
信頼区間も求めてくれる。
usage:
H = ttest2(x,y)
H = ttest2(x,y,alpha)
H = ttest2(x,y,alpha,tail)
H = ttest2(x,y,alpha,tail,vartype)
H = ttest2(x,y,alpha,tail,vartype,DIM)
[H,PVAL] = ttest2(...)
[h,p,ci,stats] = ttest2(...)
alpha は有意水準(デフォルトで 0.05)
tail は welch_test(),t_test_2() の場合と同じ
vartype は デフォルトで "equal" **"unequal" はサポートされていない**ので,welch_test() を使う
戻り値を指定しない場合は H を返すので注意が必要である。帰無仮説が棄却されれば H = 1,棄却できなければ H = 0。
他の関数では戻り値を指定しない場合は $p$ 値を返すものが多いので,0 が返されて「$p$ 値が 0 に近いぐらい小さい...有意である」などと早とちりしてはいけない。
結論として,この関数は使うに値しない。welch_test() を使おう。
[h,p,ci,stats] = ttest2(x, y)
h = 0
p = 0.527470650898257
ci =
-6.733982141171007
3.491315474504342
stats =
scalar structure containing the fields:
tstat = -0.636066149394698
df = 53
sd = 9.412810486664524