grubbs検定
標本が正規分布に従うとき外れ値判定する方法にスミルノフ・グラブス検定がある。
今、正規分布に従う標本$X_1, X_2, \dots, X_n$がある。このなかの最大値$X_n$が外れ値であるか検定する。
T = { X_n - \bar X \over \sqrt{ \text{Var}(X) } } \\
s_0 = (N-1) \sqrt{ t_0^2 \over N(N-2)+N t_0^2 }
このとき$ s_0 > T $であれば外れ値である。
ここで$t_0$は両側検定の場合、自由度$N-2$の$t$分布の$\alpha/2N\times100$パーセンタイル点である。片側検定の場合には、$\alpha/N\times100$パーセンタイル点とする。
$\text{Var}(X)$は不偏分散である。
以下のmatlabスクリプトは以上の計算を行う。matlabのisoutlier関数で同じ計算を行えるのであわせて結果を示す。なおここでは$s_0$をデータと同じスケールに変換し結果を示している。
計算の一例を下記にしめす。標本を正規分布からサンプルしているが、$N=8$, $\alpha=0.05$の両側検定の場合、わりと頻繁に外れ値と検定される(5%の確率で第一種の過誤となるはずであるから当然である)。
データ 0.03 -0.80 -2.15 1.84 -2.75 -0.93 0.45 0.00
この値以上であれば外れ値: 2.571601 ( matlabのgrubbs検定の値 2.571601 )
N = 8;
X = randn( N-1, 1 );
X(end+1) = 0;
[TF, Lo, Up, C] = isoutlier(X,'grubbs' );
Xbar = sum(X)/N;
U = var(X);
maxX = max(X);
T = (maxX-Xbar)/( sqrt( U ) );
t0 = tinv(0.05/(2*N), N-2); % 両側検定
s0 = (N-1)*sqrt( t0^2/( N*(N-2)+N*t0^2 ) );
fprintf( ' データ ' );
fprintf( ' %4.2f ', X );
fprintf( '\n' );
fprintf( ' この値以上であれば外れ値: %f ( matlabのgrubbs検定の値 %f )\n', s0*(sqrt(U))+Xbar, Up );
以上