108

美しさと年齢の多変量データがあります。年齢は 20 歳から 40 歳の範囲で 2 刻み (20、22、24....40) で、データのレコードごとに、年齢と 1 から 5 までの美しさの評価が与えられます。このデータ (X 軸の年齢、Y 軸の美しさの評価) の箱ひげ図を作成すると、各箱のひげの外側にいくつかの外れ値がプロットされます。

これらの外れ値をデータ フレーム自体から削除したいのですが、R が箱ひげ図の外れ値をどのように計算するのかわかりません。以下は、私のデータがどのように見えるかの例です。 ここに画像の説明を入力

4

11 に答える 11

152

誰も最も簡単な答えを投稿していません:

x[!x %in% boxplot.stats(x)$out]

これも参照してください: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/

于 2011-02-08T19:24:08.663 に答える
132

OK、このようなものをデータセットに適用する必要があります。置き換えて保存しないでください。そうしないと、データが破壊されます。ところで、データから外れ値を (ほとんど) 決して削除しないでください。

remove_outliers <- function(x, na.rm = TRUE, ...) {
  qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
  H <- 1.5 * IQR(x, na.rm = na.rm)
  y <- x
  y[x < (qnt[1] - H)] <- NA
  y[x > (qnt[2] + H)] <- NA
  y
}

実際の動作を確認するには:

set.seed(1)
x <- rnorm(100)
x <- c(-10, x, 10)
y <- remove_outliers(x)
## png()
par(mfrow = c(1, 2))
boxplot(x)
boxplot(y)
## dev.off()

繰り返しになりますが、これを自分で行うべきではありません。=)

編集:na.rm = TRUEデフォルトとして追加しました。

EDIT2:関数を削除quantileし、添え字を追加したため、関数が高速になりました!=)

ここに画像の説明を入力

于 2011-01-24T22:47:10.133 に答える
32

outline = FALSEboxplot を実行するときのオプションとして使用します (ヘルプを読んでください!) 。

> m <- c(rnorm(10),5,10)
> bp <- boxplot(m, outline = FALSE)

ここに画像の説明を入力

于 2011-01-24T21:44:29.397 に答える
17

boxplot 関数は、プロットを行うために使用される値を返します (実際には bxp() によって行われます)。

bstats <- boxplot(count ~ spray, data = InsectSprays, col = "lightgray") 
#need to "waste" this plot
bstats$out <- NULL
bstats$group <- NULL
bxp(bstats)  # this will plot without any outlier points

「外れ値」を削除することは統計上の不正行為であると考えているため、特定の質問には意図的に答えませんでした。それらを箱ひげ図にプロットしないことは許容できる慣行だと思いますが、標準偏差の数または四分位幅の数を超えているという理由だけでそれらを削除することは、観測記録の体系的かつ非科学的な改変です。

于 2011-01-24T22:04:15.043 に答える
11

外れ値の削除に関連するパッケージを探したところ、このパッケージが見つかりました (驚くべきことに「外れ値」と呼ばれ ています!): https://cran.r-project.org/web/packages/outliers/outliers.pdf
外れ値を削除するさまざまな方法を参照してください。その中でrm.outlier最も便利な方法を見つけました。上記のリンクにあるように、「外れ値が統計テストによって検出および確認された場合、この関数はそれを削除するか、サンプル平均または中央値で置き換えることができます」また、同じソースからの使用部分も次のとおりです

rm.outlier(x, fill = FALSE, median = FALSE, opposite = FALSE)

引数
x データセット、ほとんどの場合はベクトル。引数がデータフレームの場合、外れ値は sapply によって各列から削除されます。行列が与えられた場合、同じ動作が apply によって適用されます。
fill TRUE に設定すると、外れ値の代わりに中央値または平均値が配置されます。それ以外の場合、外れ値は単純に削除されます。
中央値 TRUE に設定すると、外れ値の置換で平均の代わりに中央値が使用されます。反対 TRUE に設定すると、反対の値が返されます (最大値が平均値との差が最大の場合、最小値が返され、その逆も同様です)"

于 2016-12-29T01:10:13.327 に答える
9
x<-quantile(retentiondata$sum_dec_incr,c(0.01,0.99))
data_clean <- data[data$attribute >=x[1] & data$attribute<=x[2],]

外れ値を取り除くのはとても簡単だと思います。上記の例では、属性値の 2 パーセンタイルから 98 パーセンタイルを抽出しています。

于 2015-10-23T04:55:07.917 に答える
7

しません:

z <- df[df$x > quantile(df$x, .25) - 1.5*IQR(df$x) & 
        df$x < quantile(df$x, .75) + 1.5*IQR(df$x), ] #rows

このタスクを非常に簡単に達成できますか?

于 2015-07-28T17:36:11.387 に答える
3

1 way to do that is

my.NEW.data.frame <- my.data.frame[-boxplot.stats(my.data.frame$my.column)$out, ]

or

my.high.value <- which(my.data.frame$age > 200 | my.data.frame$age < 0) 
my.NEW.data.frame <- my.data.frame[-my.high.value, ]
于 2019-11-20T10:21:16.570 に答える