外れ値をデータの両端の5パーセンタイルの値に置き換える(Winsorizeする)方法

データの中に外れ値(異常な値)がある場合、外れ値を取り除く方法もありますが、外れ値の影響を抑えるための別の方法としてWinsorizeという手法があります。

Winsorizeとは、データの上部と下部に閾値(例:5パーセンタイル)を設定し、閾値を超えた値(通常は外れ値)を、閾値の値に置き換えることです。

例えば、下記は従業員データを使用して、X軸とY軸の両方に給料の列を指定した散布図です。

Y軸に割り当てている給料をWinsorizeすると、下記の結果になります。

ご覧のとおり、Y軸の上部と下部では閾値を超えた値が一定になっていることがわかります。これは、元の給料の極値が上部と下部の閾値に変換されているためです。

'winsorize'関数の詳細はこちらをご覧ください。

ExploratoryでWinsorizeを行う方法

ExploratoryでWinsorizeを行うためには、カスタムRスクリプトを作成し、計算を作成のステップから呼び出すことで可能です。

Rスクリプトを作成する

サイドメニューにあるスクリプトのプラスボタンから「スクリプトを作成」を選択します。

下記のRスクリプトをコピーして貼り付けます。

winsor <- function (x, fraction=.05)
{
   if(length(fraction) != 1 || fraction < 0 ||
         fraction > 0.5) {
      stop("bad value for 'fraction'")
   }
   lim <- quantile(x, probs=c(fraction, 1-fraction), na.rm=TRUE)
   x[ x < lim[1] ] <- lim[1]
   x[ x > lim[2] ] <- lim[2]
   x
}

Rスクリプトの貼り付け後は、保存ボタンをクリックします。

計算を作成で作成したWinsor関数を使用する

Winsorizeしたい列ヘッダメニューから、「計算を作成」を選択します。

計算エディタに下記のように入力して実行します。

winsor(<列名>)

これにより、給料の列の値をWinsorizeすることができました。サマリビューで最小値と最大値を確認してみると、元の値から変わっていることが確認できます。

Winsorizeしたことによって、冒頭で紹介した以下のようなチャートが作られます。