LoginSignup
0
0

More than 1 year has passed since last update.

スミルノフ・グラブス検定

Last updated at Posted at 2022-06-21

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 );

以上

0
0
1

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