Smirnov-Grubbs の外れ値の検定

statistics/outlier/smirnov_grubbs
2018/07/30 更新

  1. 検定の手順
  2. R を使った検定

広告

検定の手順

Smirnov-grubbs test (単に grubbs test という場合もある)は、データが 正規分布 に従うとき、含まれる外れ値を検出する方法である (1, 3)。

帰無仮説: 全てのデータは同じ母集団からのものである。

対立仮説: データのうち、最大のものは外れ値である。

  1. 標本の大きさを n、データを X1, X2, ...., Xn とする。
  2. 平均値を Xm、不偏分散を U とする。
  3. 最大または最小となる測定値 Xi について、次の式から統計量 Ti を求める。


  1. 統計数値表から、有意点 t を求める。

広告

R を使った検定

R のパッケージを使って Grubbs test を行うことができる。

> install.packages("outliers")    #パッケージ"outliers"のインストール

サーバーを選択し、outliers というパッケージをダウンロードする。成功すると

The downloaded binary packages are in

/var/folders/...省略.../downloaded_packages

というメッセージが出る。次に

> library(outliers)

 

でこのライブラリーを読み込む。> search() で現在自分が読み込んでいるパッケージの一覧を確認することができる。これが完了したら、上と同様に、1 - 9 と100を要素としてもつデータセット x を作って Grubbs' test を行ってみる。

> x=c(1,2,3,4,5,6,7,8,9,100)

> grubbs.test(x)

 

結果は

Grubbs test for one outlier

data:  x 

G = 2.8356, U = 0.0073, p-value = 3.964e-09

alternative hypothesis: highest value 100 is an outlier 

となり、100 が外れ値であることがわかる。P値が上記の Smirnov-Grubbs test と同じなので、同じ検定をかけているものと思われる。なお、R を再起動したときは > library(outliers) からやらないと関数がみつからないようだ。


注意事項

データフレームの作成の際に、エクセルからのコピーをしたりすると、データが

> x=read.table(pipe("pbpaste"))

> x

   V1

1   1

2   2

3   3

4   4

5   5

6 100

このように縦に並んだ形式になる。V1 は、列のラベルを指定していないときに勝手に定められるラベルである。ここで grubbs.test(x) としても、
 
Error in `[.data.frame`(x, complete.cases(x)) : 
  undefined columns selected
 
というエラーになる。これはデータのどの列を解析するかを指定していないというエラーなので、$ を使って  grubbs.test(x$V1) のように V1 行を指定すれば計算されるようになる。

広告

コメント欄

フォーラムを作ったので、各ページにあるコメント欄のうち、コメントがついていないものは順次消していきます。今後はフォーラムをご利用下さい。管理人に直接質問したい場合は、下のバナーからブログへ移動してコメントをお願いします。


References

  1. スミルノフ・グラブス検定 http://aoki2.si.gunma-u.ac.jp/lecture/Grubbs/Grubbs.html
  2. Rで外れ値を計算する方法 Web.
  3. バイオスタティスティクス 外れ値 Web.