No.00131 異常値(外れ値)の整理について  【イオ】 2006/05/25(Thu) 16:47

 初心者にもかかわらず質問させていただきます。なにとぞご容赦ください。

 二つの変数の間の相関関係をみる相関係数(ピアソンの積率相関係数)を算出しようとする際に,ある本に「残差(実際の値と回帰式による推定値と差)の絶対値が,標準偏差よりも大きいものを異常値として整理(除外)して再計算する」のようなことが書かれていました。
 これによって異常値の整理を行うとして,例えば100組のデータがある場合に,その何割までならこのような除外が許容されるというような目安はあるのでしょうか。ご教示のほど,よろしくお願いいたします。

No.00139 Re: 異常値(外れ値)の整理について  【MK】 06/05/25(Thu) 23:16

異常値を取り除くときは
それが本当に”異常”なのか慎重に取り除かないといけません。
異常値と思われるデータがどういうデータなのかを元のデータに戻って
見てください。例えば,車のデータで価格を被説明変数とした場合,
異常に高い価格をつけるプレミアムのついた車もあります。ここでそういったプレミア車を想定しない場合は,それを異常値として取り除きます。
このように残差が大きいものを一つずつ見ていくことをお勧め致します。
また,異常値は全体から見てごく小さな割合であるべきです。もし多いならば別な変数で説明すべきでしょう。

No.00141 Re: 異常値(外れ値)の整理について  【イオ】 06/05/26(Fri) 09:31

MK様

 早速の返信恐縮です。
 プレミアのついた車の例,わかりやすいです。
 ご教示にしたがい,データを取り扱っていきたいと思います。ありがとうございました。

No.00144 Re: 異常値(外れ値)の整理について  【青木繁伸】 06/05/26(Fri) 13:36

母相関係数が 0, 0.1, ..., 0.9 の二次元正規分布データを 100 組生成することをそれぞれ 1000 回行い,それぞれについて,No.131 で言及されたデータの除外法により,除かれるデータ個数と,除いた結果得られる相関係数の,最小値・中央値・最大値を求めるシミュレーションを行ってみま した。
毎回生成される 100 組の二次元正規分布データは正確に指定された相関係数を持つものである(母集団を正確に再現できているということと同じ)。

結 果としては,母相関係数が 0.6 以下の場合には除かれるデータ組数は 10〜16% にもなる(中央値の場合,最大では 20% を超えることもある)。母相関係数が 0.2 〜 0.7 の場合には中央値で 0.05 以上異なる標本相関係数が得られる。最大値でみると,もっと異なる相関係数が得られることがある。

かなり,危険な(?)データ処理法ではないかと思います。
[ある本]とは,誰が書いた何という題名の本なのでしょうか。

           :   除かれるデータ個数   :  結果としての相関係数    
母相関係数 : 最小値 中央値 最大値 : 最小値 中央値 最大値
0.0 : 10 16 23 : -0.274 0.006 0.229
0.1 : 8 16 23 : -0.118 0.128 0.398
0.2 : 9 15 22 : -0.012 0.246 0.530
0.3 : 9 15 21 : 0.120 0.367 0.546
0.4 : 7 14 19 : 0.289 0.479 0.623
0.5 : 6 12 18 : 0.422 0.576 0.685
0.6 : 5 10 17 : 0.570 0.667 0.768
0.7 : 3 8 14 : 0.649 0.751 0.825
0.8 : 1 5 9 : 0.787 0.828 0.870
0.9 : 0 1 4 : 0.892 0.905 0.927

シミュレーションに用いた R プログラム
gendat2 <- function(nc, r)
{
z <- matrix(rnorm(2*nc), ncol=2)
res <- eigen(r2 <- cor(z))
coeff <- solve(r2) %*% (sqrt(matrix(res$values, 2, 2, byrow=TRUE))*res$vectors)
z <- t((t(z)-apply(z, 2, mean))/sqrt(apply(z, 2, var)*(nc-1)/nc)) %*% coeff
z %*% chol(matrix(c(1, r, r, 1), ncol=2))
}
sim <- function(i)
{
d <- gendat2(100, r)
ans <- lm(d[,2] ~ d[,1])
use <- ans$residuals <= sd(d[,2])
x <- d[use,1]
y <- d[use,2]
r <- cor(x, y)
return(list(omit=100-sum(use), r=r))
}
for (r in 0:9/10) {
ans <- sapply(1:1000, sim)
cat(r, apply(matrix(unlist(ans),2), 1, fivenum), "\n")
}

No.00202 Re: 異常値(外れ値)の整理について  【にゃんちゅう】 06/05/30(Tue) 15:14

合理的理由があって削除するのでなければ,robst estimation をすることになります。
日本語の参考書はないと思いますので,英語の本を探してください。

No.00217 Re: 異常値(外れ値)の整理について  【イオ】 06/05/31(Wed) 09:27

 青木先生,にゃんちゅう様,お礼の返事が遅くなって申し訳ありませんでした。

  素人ながら,「異常値と呼ばれるデータを整理(除外)することは,両者の関係の有無を推測する際にいわば「関係が無いことについての例証を除外する」こと でもあり,それによって導かれた検証結果が妥当といえるのか」と疑問を持っていたのですが,青木先生のシミュレーションを用いての指摘は,それを実証する ものでした。
 MKさんの指摘にもありましたが,異常値の整理は極めて慎重に(もはや怖くて出来ませんが・・・(笑))行うべきなのですね。
 ありがとうございました。

追伸:青木先生のご照会にお応えします。
  今回の質問の典拠とさせていただいた「ある本」とは,稲田健二「地方自治体のための定員算定の技法とその活用」(株)経営管理センター福岡本部,平成2 年,です。同書のp.21に「標準偏差と残差の値が著しく相違する資料都市を除く。」として,一連の処理の流れが示されてありました。
 

● 「統計学関連なんでもあり」の過去ログ--- 038 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る