Exploratory コミュニティ

重回帰分析のはずれ値に関して

#1

質問失礼します。

重回帰分析で外れ値(他とは挙動が大きく異る行)を見つけることは可能でしょうか?

予測式を作る時に、元データから変なデータを除きたいと考えています。

何卒、宜しくお願いいたします。

#2

@Masaki_Nakazawa さん

古典的かもしれませんが、回帰分析を行われているということなので、「回帰診断( Regression diagnostic)」で外れ値を検討するのはどうでしょうか。期待されているような回答でなければ申し訳ありません。

誤差に正規分布を仮定する一般的な重回帰分析と想定して話をすすめます。また、ここでは、何をもって「そのデータを外れ値とみなすのか?」みたいな話はしません。

Exploratoryの「アナリティクス」ビューから回帰分析を行うと、結果として「残差/予測値」のタブに回帰診断の一部が含まれています。そのため、このプロットを見れば、外れ値がモデルに与えている影響が可視化できます。

55

ですが、実際にデータをフィルタしようとすると、このプロットからでは該当するデータの情報がないので、実際に回帰診断を一通り作るのもよいかと思います。プロットのためにデータは、「残差/予測値」から「データ」のタブに移動し、「↓」マークの「デーブルデータを新規データフレームとして保存」から取り出します。
(※説明のために、行を識別する番号を付与したり、外れ値の該当業にフラグを立ててます。50番目がここでは外れ値の扱いです。)

残差のふるまい

下記のカラムを「散布図」で利用します。このプロットでは、残差の全体像の把握できます。残差に何らかのパターンがありそうなら、線形回帰モデルを自体がよい選択とはいえなくなったりします。

また、外れ値データについては、観測値と予測値の残差が大きくなることが想定されるので、この図の50番みたいな形で可視化できます。

  • x: Predicted Value
  • y: Residuals

17

残差の大きさ

先程と似たような図ですが、残差の変動の考察が可能です。 標準化されている残差なので、大体の値が3シグマの範囲に入るので、標準化残差が3を超えているような値は外れ値としての可能性は高そうです。(ですが、Rで回帰診断を行うとStandardised Residualsの絶対値の平方根が計算されるので、これにここでも合わせていますので、√3=1.73となるので、それを超えていると外れ値と疑っても良いかと思います。)

  • x: Predicted Value
  • y: Standardised Residualsの絶対値の平方根

25

Cookの距離

Cookの距離は、各データが回帰式の推定に与える影響度合いを表現している指標です。Cookの距離が大きいデータは「回帰式の推定に影響する度合いが高く、外れ値の可能性」があります。

  • x: rowid
  • y: cooks distance

16

(参考までに…記憶が正しければ…「データiのクックの距離」は、「データiを除いたデータの推定値と、実際の当てはめ値との距離」みたいものを計算していたはずです…記憶が曖昧なので、興味がある場合は検索ください)

という感じで、回帰診断から外れ値の影響を可視化しつつ、外れ値かどうかを判断しながら、モデルの計算から削除するしないを検討するはいかがでしょうか。参考になれば幸いです。

便利な関数

デフォルトで外れ値を除く関数がExploratoryには用意されているみたいなので、目的に応じて、この関数を使うのが便利かもですね!

https://exploratory.io/note/GMq1Qom5tS/Exploratory-Hour-88-gHN3HzJ2aW

サンプルデータの生成Rスクリプト

# Sample data
set.seed(1989)
n <- 100
x1 <- rnorm(n, 100, 10)
x2 <- rnorm(n, 100, 10)
y <- 5*x1 - 3*x2 + rnorm(n, 0, 10)
df <- data.frame(y, x1, x2)
df[50,1] <- 500
df
#3

スギアキさん

いつもいつもお世話になります。

今回も丁寧な解説有難うございます。
若輩者の私にはレベルの高い内容ですが、まずは試してみようと思います。

アドバイスありがとうございました。