スミルノフ・グラブス検定は、正規分布を仮定した標本において、最大値または最小値が外れ値かどうか判定する検定の一つである。
外れ値を除去する際、外れ値を一つずつ検証することよりも、外れ値がすべて除去されたデータだけがほしいときもあるのではないだろうか。

ここでは、正規分布を仮定したデータからスミルノフ・グラブス検定を繰り返し用いて外れ値を除去するソースコードをご紹介する。
このソースコードは、次のサイトのソースコードを参考にさせていただいた。

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

さっそくだが、スミルノフ・グラブス検定を繰り返し用いて外れ値を除去するソースコードは次になる。


remove.outliers <- function(x, conf.level = 0.95)
{
  x <- x[!is.na(x)]
  del.val <- NULL
  
  while (TRUE) {
    n <- length(x)
    if (n < 3) {
      break
    }
    
    r <- range(x)
    t <- abs(r - mean(x)) / sd(x)
    q <- sqrt((n - 2) / ((n - 1) ^ 2 / t ^ 2 / n - 1))
    p <- n * pt(q, n - 2, lower.tail = FALSE)
    
    if (t[1] < t[2]) {
      if (p[2] < 1 - conf.level) {
        del.val <- c(del.val, r[2])
        x <- x[x != r[2]]
        next
      }
    } else {
      if (p[1] < 1 - conf.level) {
        del.val <- c(del.val, r[1])
        x <- x[x != r[1]]
        next
      }
    }
    break
  }
  return(list(x = x, del.val = del.val))
}

参考にさせていただいたサイトにあるデータで試すと、次のようになり結果は一致する。


> x <- c(133, 134, 134, 134, 135, 135, 139, 140, 140, 140,
         141, 142, 142, 144, 144, 147, 147, 149, 150, 164)
> remove.outliers(x)
$x
 [1] 133 134 134 134 135 135 139 140 140 140 141 142 142 144 144 147 147 149 150

$del.val
 [1] 164

このデータに対して極端な値を追加して試すと、次のようになり、外れ値がすべて除去されたデータだけが手に入る。


> x <- c(-100, -50, 133, 134, 134, 134, 135, 135, 139, 140, 140, 140,
          141, 142, 142, 144, 144, 147, 147, 149, 150, 164, 200, 300)
> remove.outliers(x)
$x
 [1] 133 134 134 134 135 135 139 140 140 140 141 142 142 144 144 147 147 149 150

$del.val
 [1] -100  -50  300  200  164

関連する記事

  • R言語 CRAN Task View:堅牢な統計的方法R言語 CRAN Task View:堅牢な統計的方法 CRAN Task View: Robust Statistical Methodsの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Martin Maechler Contact: Martin.Maechler at […]
  • DockerでMariaDB10.5を使う方法DockerでMariaDB10.5を使う方法 DockerでMariaDB 10.5を使用できるまでの手順をお伝えします。 ここでは、docker-composeとDocker公式のMariaDB 10.5イメージを用います。 環境 ホストOS ホストOSはUbuntu 20.04を用いております。 $ cat /etc/lsb-release […]
  • R言語 CRAN Task View:追跡データの処理と分析R言語 CRAN Task View:追跡データの処理と分析 CRAN Task View: Processing and Analysis of Tracking Dataの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Rocío Joo, Matthew E. Boone, Michael Sumner and Mathieu […]
  • カイ二乗検定 – 適合度検定カイ二乗検定 – 適合度検定 適合度検定とは、観測度数分布が期待度数分布と同じかどうかを統計的に確かめる方法である。 適合度検定を行う手順は次の通りである。 仮説を立てる。 帰無仮説 H0:観測度数分布と期待度数分布が同じ。 対立仮説 […]
  • 統計的因果推論による傾向スコアとIPW推定量の基本的な考え方統計的因果推論による傾向スコアとIPW推定量の基本的な考え方 [latexpage] 統計的因果推論による因果効果を調べる手段として、傾向スコアとIPW推定量という概念があります。ここでは、なぜ傾向スコアを考えるのか、傾向スコアの逆数の重み付けはどのような意味があるのかを、複雑な数式を用いずに具体例を通してご説明します。 さっそくですが、次の具体例を考えます。 […]
R スミルノフ・グラブス検定を繰り返し用いて外れ値を除去する方法