1

私はRを初めて使用し、最後の2列を除いてすべて数値である600を超える変数を持つ大規模なデータフレームで外れ値をテストする関数を使用しようとしました。一度に 1 つの列をテストするために、パッケージの外れ値関数を試してみましたoutliersが、使用できない数値ベクトルで終了しました。データフレーム内のすべての外れ値を特定するより良い方法はありますか?

 myout <- c()
    for (i in 1:dim(training)[2]){
     if (is.numeric(training[,i])) {
     myout <- c(myout,outlier(training[,i]))  }
     }
4

2 に答える 2

2

外れ値のヘルプファイルを読むとわかるように、変数ごとに 1 つの値、つまり平均と最も異なる値が見つかります。あなたが望むのは、外れ値であるすべてのデータポイントのインデックスを変数ごとに見つけることだと思います。これは次の方法で実行できます (もちろん、最初に数値以外の変数を削除する必要があります)。

# first write a custom function that returns the index of all outliers
# I define an outlier as 3 sd's away from the mean, you can adjust that

is.outlier <- function(x) which(abs(x - mean(x)) > 3*sd(x))

# turn the df into a list, and apply the function to each variable with lapply

df.as.list <- as.list(df)   # enter the name of your data frame instead of df
lapply(df.as.list, is.outlier)

列 i の変数の外れ値のインデックスを要素 i に持つリストを返します。

于 2013-03-05T10:00:19.323 に答える
0

実際には外れ値を削除したくないかもしれませんが、この2 年前:

x[!x %in% boxplot.stats(x)$out] 
于 2013-03-07T00:00:09.033 に答える