LoginSignup
0
0

More than 1 year has passed since last update.

Octave で独立 2 標本の平均値の差の検定(t 検定)

Last updated at Posted at 2022-07-11

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0