外れ値の検出

正規分布に従うデータから外れ値を検出する方法には、以下に示すような方法がある。

グラブス検定 grubbs test

データが正規分布に従うとき、データ中に含まれる外れ値または異常値を検出する方法である。

library(outliers)
x <- rnorm(20)
x[1] <- 8   # make an outlier

grubbs.test(x)
##        Grubbs test for one outlier
##
## data:  x
## G = 3.6497, U = 0.2620, p-value = 1.236e-05
## alternative hypothesis: highest value 8 is an outlier

外れ値が 2 つ存在するときの例。grubbs.test 関数に type オプションに整数値を与えて動作を切り替える。

  • この引数に 20 を与えると、「大きい値から」または「小さい値から」のどちらかの片方向からのみ、外れ値を最大 2 つまで探索する。
  • 11 を与えると、「大きい値から」と「小さい値から」の両方から最大 2 つまでの外れ値を探索する。
  • とくにこの type オプションを利用しない場合は 10 である。片方向から 1 つだけの外れ値を探索する。
library(outliers)

# 外れ値が同じ側に2つ存在する場合
x <- rnorm(20)
x[c(1,11)] <- c(8, 9)


grubbs.test(x, type = 20)
##        Grubbs test for two outliers
## 
## data:  x
## U = 0.1313, p-value < 2.2e-16
## alternative hypothesis: highest values 8 , 9 are outliers


# 外れ値が異なる側に2つ存在する場合
x <- rnorm(20)
x[c(1,11)] <- c(-4, 9)

grubbs.test(x, type = 11)
##         Grubbs test for two opposite outliers
## 
## data:  x
## G = 5.1954, U = 0.2018, p-value = 0.0005646
## alternative hypothesis: -4 and 9 are outliers

ディクソン検定 dixon test

データが正規分布に従うとき、データ中に含まれる外れ値または異常値を検出する方法である。ディクソン検定の場合は、外れ値を 1 個だけしか検出できない。つまり、データに複数の外れ値が含まれている場合、すべてを検出することはできない。

library(outliers)
x <- rnorm(20)
x[1] <- 8

dixon.test(x)
##         Dixon test for outliers
## 
## data:  x
## Q = 0.6926, p-value < 2.2e-16
## alternative hypothesis: highest value 8 is an outlier

カイ二乗検定 chisquared test

カイ二乗検定による外れ値検出方法である。

library(outliers)
x <- rnorm(20)
x[1] <- 8

chisq.out.test(x)
##        chi-squared test for outlier
## 
## data:  x
## X-squared = 12.1905, p-value = 0.0004803
## alternative hypothesis: highest value 8 is an outlier

コクラン検定 cochran test

コクラン検定を利用した外れ値の検出方法である。複数の実験群が存在したとき、特定の実験群から得られたデータの分散が、他に比べ大きかったり、小さかったりする場合、その値を外れ値とする方法。

library(outliers)
x <- data.frame(
       A = rnorm(10), 
       B = rnorm(10),
       C = rnorm(10),
       D = rnorm(10, sd = 5)    # 外れのグループ
     )

#分散を求めて第1引数に、実験群ラベル1-4を第2引数に与える
cochran.test(apply(x, 2, var), 1:length(x))
##        Cochran test for outlying variance
##
## data:  apply(x, 2, var)
## C = 0.7345, df = 2.5, k = 4.0, p-value = 0.1364
## alternative hypothesis: Group 4 has outlying variance
## sample estimates:
##         1         2         3         4 
## 1.1723261 0.5793089 1.0434416 7.7342000 

ホテリング理論(Hotelling's theory)

ホテリング理論は、データが正規分布に従うときに、外れ値を検出する手法である。データ全体から平均値 μ および分散 σ2 を計算します。次に、次の式に基づいて、x の異常度 a(x) を計算する。

\[ a(x) = \frac{\left(x - \mu\right)^{2}}{\sigma^{2}} = \left(\frac{x - \mu}{\sigma}\right)^{2} \]

x は正規分布に従うので、((x - μ) / σ) も正規分布に従う。そのため、その 2 乗値 ((x - μ) / σ)2 は、(x が決まれば a(x) を計算できるので)、自由度 1 のカイ二乗分布に従う。そこで、このカイ二乗分布において、χ2(1; k) < α となる k を閾値とし、a(x) が k を超えているかどうかを調べて、外れ値判定を行う。