0

外れ値で構成される大量のデータを処理しています。コードはほとんどのデータセットで正常に機能しますが、少数では機能しません。

このサンプルデータ:

set.seed(100)
m=rnorm(200)
m[1]=100   #inserting outlier
m[2]=50

私のコードは:

library(outliers)
lg=outlier(m, logical=TRUE)
for(i in 1:length(lg)){
if(lg[i]==c("TRUE")){ 
 m[i]=NA }}

これにより、外れ値がNAに置き換えられます。この場合、100は削除されますが、50は削除されません。同じことが私のデータセットでも起こっています。理由がわかりません。これについて助けを求めたい。

読んでくれてありがとう。

4

2 に答える 2

2

外れ値の定義によって異なります。たくさんあります。

メソッドは、outlier外れ値を**平均との差が最大のオブジェクトとして定義します。これは、外れ値の数を強制的に 1 にするため (同点でない限り)、かなり弱い定義です。

このデータセットを試してください:

0 .1 .1 .1 -.1 -.1 -.1

0このデータセットでは、 !以外はすべて削除する必要があります。

これを次のように変更します。

0 .1 .1 .1 -.1 -.1 -.100000001

これで、1 つの要素だけが削除されますが、違いは精度の限界にあり、ほとんど重要ではありません。

もっと巧妙な外れ値検出方法を試してみてください。

于 2012-06-11T06:24:29.137 に答える
1

ここで、上記のコメントを回答に展開します。

あなたの例では、 m[40]=m[90]=m[67]=150 が引き分けです。m[40] = 150; を使用してみると、m[90] = 200; m[67] = 250; m[67] のみが外れ値として識別されることがわかると思います。姉妹統計サイトである Cross Validated で、データ セットの外れ値の最適な定義について尋ねてください。それなら、誰かがその定義の R コードをプログラミングするのを手伝ってくれるかもしれません。

以下は、外れ値の簡単な定義の R コードです。外れ値とは、値が 50 を超える任意の観測値です。この定義を使用することはお勧めしません。実際、しないでください。ここでは説明のためにのみ使用します。以下のコードは、すべての外れ値を NA に置き換えます。

set.seed(100)
m=rnorm(200)
m[10]=100
m[40]=150
m[90]=200
m[67]=250
m

outlier <- rep(0,length(m))
outlier[m>50]=NA
outlier

m[is.na(outlier)]=NA
m
于 2012-06-11T06:25:10.090 に答える