2017-07-18 3 views
0

私はRの初心者です。私は質問があります。変数の外れ値をチェックするために我々は、一般的に使用します。Rを使用して1つのボックスプロットで複数変数の異常値を確認するにはどうすればよいですか?

boxplot(train$rate) 

と仮定は、レートが私のデータセットの変数で、列車は私のデータは、名前を設定しています。しかし、私は100または150変数のような複数の変数を持っている場合、それは1つの変数の異常値をチェックするために非常に時間がかかるでしょう。 100個の変数の外れ値を1つのボックスプロットに入れる関数はありますか?

「はい」の場合、変数の外れ値を1つずつではなく一度に削除するにはどの関数を使用しますか?この問題を解決するのを手伝ってください。予め

おかげ

答えて

1

私はRui Barradas氏に、それ以上考慮せずに外れ値を取り除くことは悪い習慣であることに同意します。値が有効である限り、データに保持するか、影響力のある値の有無にかかわらず、少なくとも2つの別々の分析を実行する必要があります。 forループを使用して、データセット内のすべての変数に関数を適用できます。

train2<-train # Copy old dataset 
outvalue<-list() # Create two empty lists 
outindex<-list() 
for(i in 1:ncol(train2){ # For every column in your dataset 
    outvalue[[i]]<-boxplot(train2[,i])$out # Plot and get the outlier value 
    outindex[[i]]<-which(train2[,i] == outvalue[[i]]) # Get the outlier index 
    train2[outindex[[i]],i] <- NA # Remove the outliers 
} 

これが動作し、データをプロットしますが、それはかなり遅いです。データをプロットするのではなく、他の異常値関数を調べることができる異常値が必要な場合、extremevaluesパッケージには、異常値を特定するための別の方法があり、プロットを必要としない関数があります。 これはextremevaluesパッケージからgetOutliers機能を使用しています

outRight<-list() 
outLeft<-outRight 
for(i in 1:ncol(train2){ 
    outRight[[i]]<-getOutliers(train2[,i])$iRight 
    outLeft[[i]]<-getOutliers(train2[,i])$iLeft 
    train2[outRight[[i]],i] <- NA 
    train2[outLeft[[i]],i] <- NA 
} 
+1

情報をありがとう、私はパッケージ 'extremevalues'について知りませんでした。興味深いですね。 'boxplot'には' plot'という引数があり、 'FALSE'に設定するとグラフがプロットされないことに注意してください。これにより、時間を節約し、スクリーンの不動産を監視することができます。 –

+0

ありがとうございました –

0

値を返す関数boxplot。ヘルプページのValueセクションが表示されている場合は、名前付きコンポーネントの一覧(outの1つ)が表示されます。それはあなたが探しているようだ。

bp <- boxplot(train$rate) 
bp$out 
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers 

私もそうしません。異常値はデータであり、正常/起こりそうである。それらを排除することで、データ全体を考慮に入れておらず、悪い習慣です。

+0

@RuiBarrades:その1つの変数のみの場合ではないでしょうか?チェックする変数が複数ある場合は、これらの変数のループが必要です。 また考えてみましょう:これは、すべての変数の外れ値ではないケースにつながります。 –

+0

@JakobGepp:はい、そうです。上記のコードは適合させる必要があります。たとえば、 'lapply'と一緒に使用する汎用関数を作成する必要があります。 –

+0

本当にありがとうございます。 –

関連する問題