2014年6月11日水曜日

Rの箱ひげ図(boxplot)で外れ値を表示させない

例えば17人のテストの点数のデータがあって、↓こんなだったとしましょう。

x <- c( 40, 45, 50, 55, 60, 62, 63, 64, 65, 66, 67, 68, 70, 75, 80, 85, 90)


そのまま、boxplotを使うと↓こんな感じになります。

boxplotの表示結果(外れ値扱い 有り)

boxplot(x)


で、
  「この小っちゃい丸は何だ?」
  「外れ値です」
  「外すなよ」

みたいなこともあると思います。

外れ値と言っても、プロットされているわけだから情報が落ちているわけじゃないし、構わないような気もしますが、まあ、特別扱いしたくないって時もあるでしょう。

で、ヒゲをどこまで伸ばすかというのは、boxplot関数のrangeオプションで指定します。デフォルトだと、箱の長さの1.5倍までとなっております。

このrangeをめちゃくちゃ大きくしておけば、事実上、ヒゲは最大のデータ、最小のデータまで伸びることになりますが、そんなことしなくても、特別な値 0 を指定することで、最大・最小まで伸ばすことができます。

boxplotの表示結果(外れ値扱い 無し)

boxplot(x, range=0)


rangeの指定によって、ヒゲの長さがどう変化するか見てみましょう。

boxplotで外れ値扱いの範囲を変化させたもの(外れ値の表示 有り)
par(mfrow=c(1,4))
stripchart(x, vertical=T, pch=1, main="散布図")
boxplot(x, range=1  , main="range=1")
boxplot(x, range=1.5, main="range=1.5(デフォルト)")
boxplot(x, range=2.0, main="range=2.0")


一番左のはデータをそのままプロットした散布図です。

左から二番目はrange=1となっているので、箱の長さの1倍分までヒゲを伸ばします。25パーセンタイルが60点、75パーセンタイルが70点なので、箱のサイズは10。つまり上方には、80(=70+10)までヒゲが伸びることになります。

いつでも80まで伸びるというわけではなく、80以下で最も大きいデータまで伸びます。今回はちょうど80点というデータがあるので、そこまで伸びているというわけです。■

[2014年6月12日追記]「外れ値として扱うが表示はしない」という風にしたい場合は、 outline=F というオプションを使います。


boxplotで外れ値扱いの範囲を変化させたもの(外れ値の表示 無し)
x <- c( 40, 45, 50, 55, 60, 62, 63, 64, 65, 66, 67, 68, 70, 75, 80, 85, 90)
par(mfrow=c(1,4))
stripchart(x, vertical=T, pch=1, ylim=c(40,90), main="散布図")
boxplot(x, range=1  , outline=F, ylim=c(40,90), main="range=1\noutline=F")
boxplot(x, range=1.5, outline=F, ylim=c(40,90), main="range=1.5(デフォルト)\noutline=F")
boxplot(x, range=2.0, outline=F, ylim=c(40,90), main="range=2.0\noutline=F")





0 件のコメント:

コメントを投稿