Top Banner
Rで学ぶロバスト推定 2011年4月29日 第13回Tokyo.R @sfchaos
39

Rで学ぶロバスト推定

Jan 15, 2015

Download

Documents

sfchaos

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Rで学ぶロバスト推定

Rで学ぶロバスト推定

2011年4月29日第13回Tokyo.R

@sfchaos

Page 2: Rで学ぶロバスト推定

本発表の趣旨

分析データには外れ値がつきもの

外れ値?

Page 3: Rで学ぶロバスト推定

分析データには外れ値がつきもの

外れ値? 本当に外して良い?

Page 4: Rで学ぶロバスト推定

分析データには外れ値がつきもの

外れ値? 本当に外して良い?

ロバスト推定とは,外れ値を除外せずに,受ける影響を小さくして頑健なモデルを推定する方法

本発表では,ロバスト推定の初歩についてお話します.

Page 5: Rで学ぶロバスト推定

目次

1. 自己紹介

2. イントロダクション ~外れ値への対処~

3. ロバスト推定

4. まとめ

Page 6: Rで学ぶロバスト推定

1. 自己紹介

2. イントロダクション ~外れ値への対処~

3. ロバスト推定

4. まとめ

Page 7: Rで学ぶロバスト推定

1. 自己紹介

TwitterID: @sfchaos

職業:コンサルタント 金融工学のモデル構築・データ解析

最近,大規模データ解析の企画に着手(Hadoop, Mahout, CEP等)

「Rパッケージガイドブック」(東京図書,2011年4月刊行)に記事を書かせてもらいました. bigmemoryパッケージ(大規模データの管理・分析)

RTisean/tseriesChaosパッケージ(非線形(カオス)時系列解析)

Page 8: Rで学ぶロバスト推定

1. 自己紹介

2. イントロダクション ~外れ値への対処~

3. ロバスト推定

4. まとめ

Page 9: Rで学ぶロバスト推定

2. イントロダクション ~外れ値への対処~

動物の体長・脳の大きさに関するデータ(65レコード)

> library(robustbase)

> data(Animals2, package="robustbase")

> plot(Animals2)

Page 10: Rで学ぶロバスト推定

2.1 普通に考えると・・・

外れ値を検出して除去する

元データ外れ値の

検出外れ値

外れ値の除去判断

外れ値の除去

データの性質や実務的な観点を考慮

分析対象データ

統計的手法を使用

Page 11: Rで学ぶロバスト推定

例)Mahalanobisの距離を用いた外れ値の除去

)()( 12 µµ −Σ−= − xxD t

> cen <- apply(Animals2, 2, mean)> ani2.maha <- mahalanobis(Animals2, cen, cov(Animals2))> # Mahalanobisの距離を用いた検定統計量がF分布の90%分位点を越える場合は

外れ値とみなす> n <- nrow(Animals2); p <- ncol(Animals2)> ng <- n * (n-p)/ ((n^2 - 1) * p) * ani2.maha > qf(0.9, n, p)> plot(Animals2, col=ifelse(ng, "red", "black"))> labels <- paste(which(ng), ":", rownames(Animals2)[ng], sep="")> text(Animals2[ng, ], labels=labels)

Σ :分散共分散行列

Page 12: Rで学ぶロバスト推定

検出された点を除いても良い?

row.names body brain

61 Asian elephant 2547.000 4603.00

62 African elephant 6654.000 5712.00

65 Brachiosaurus 87000.000 154.50

Page 13: Rで学ぶロバスト推定

仮に外れ値を除去すると・・・

新しい外れ値(らしきもの)が出現

(screening)

高次元では外れ値の除去は難しい問題orz

Page 14: Rで学ぶロバスト推定

2.2 外れ値を除去せずに分析してみる

とりあえずデータをそのまま線形回帰分析に突っ込む

> ans.lm <- lm(brain ~ body, data=Animals2)

> abline(ans.lm, col="blue")

Page 15: Rで学ぶロバスト推定

ダメポ。・゚・(ノД`)・゚・。

> ans.lm <- lm(brain ~ body, data=Animals2)

> abline(ans.lm, col="blue")

Page 16: Rで学ぶロバスト推定

2.3 そこでロバスト回帰が登場!!

> library(robustbase)

> ans.lmrob <- lmrob(brain ~ body, data=Animals2)

> abline(ans.lmrob, col="red")

望んでいた結果が得られる.

Page 17: Rで学ぶロバスト推定

1. 自己紹介

2. イントロダクション ~外れ値への対処~

3. ロバスト推定

4. まとめ

Page 18: Rで学ぶロバスト推定

3.1 そもそも線形回帰って?

faithfulデータ(272レコード)

Page 19: Rで学ぶロバスト推定

残差

Page 20: Rで学ぶロバスト推定

残差の二乗の和が最小となる回帰直線を選ぶ.

∑=

N

iir

1

2min

Page 21: Rで学ぶロバスト推定

普通の線形回帰では,

>

残差

Page 22: Rで学ぶロバスト推定

3.2 ロバスト推定

ロバスト推定には,M推定法,L推定法,R推定法等が知られている.

今日は,M推定法についてお話します.

簡単のため,データは2次元のものに限って説明します.

Page 23: Rで学ぶロバスト推定

3.3 普通の回帰分析とM推定の考え方の違い

線形回帰の場合は,すべての点を同じ重みで考えている.

∑=

N

iir

1

2min 21 ir⋅=

Page 24: Rで学ぶロバスト推定

M推定では,モデルへの当てはまりが悪い点の重みを低く設定することにより影響を小さくする.

∑=

N

iir

1)(min ρ※実際は,M推定は

  最尤推定の一般化になっているが,  ここでは説明を割愛

Page 25: Rで学ぶロバスト推定

3.4 実データに対するロバスト推定

① phonesデータセット 1950年~73年までのベルギーにおける電話回数(単位:百万件).

1964年~69年は電話時間が記録されている.

Page 26: Rで学ぶロバスト推定

念のため,線形回帰もやってみる.

> phones.lm <- lm(phones$calls ~ phones$year)

> abline(phones.rl, col="blue")

Page 27: Rで学ぶロバスト推定

ロバスト回帰 悪くはないが,少し傾きがきつい?

> phones.rl <- rlm(phones$calls ~ phones$year, maxit=100)

> abline(phones.rl, col="green")

Page 28: Rで学ぶロバスト推定

重み付け関数を変更する.

> phones.rl <- rlm(phones$calls ~ phones$year, maxit=100, phi=phi.square)

> abline(phones.rl, col="red")

Page 29: Rで学ぶロバスト推定

② お待ちかね(?)のAnimals2データセット

Page 30: Rで学ぶロバスト推定

線形回帰とロバスト線形回帰 思い通りになっていないけど,phonesデータセットの場合と同じ現象だから大丈夫!

> abline(lm(brain ~ body, data=Animals2), col="blue")

> abline(rlm(brain ~ body, data=Animals2, maxit=100), col="green")

Page 31: Rで学ぶロバスト推定

よし,できた! ・・・あれ?

> abline(rlm(brain ~ body, data=Animals2, psi=psi.bisquare), col="pink")

Page 32: Rで学ぶロバスト推定

パラメータを変えれば,きっと合うよね

・・・合わないorz

> plot(Animals2)

> # 重み関数の形を変えてフィッティングを繰り返す

> for (i in 1:20) abline(rlm(brain ~ body, data=Animals2, maxit=100,

+ psi=psi.bisquare, c=i), col=i)

Page 33: Rで学ぶロバスト推定

パラメータを変えれば,きっと合うよね

・・・合わないorz

> plot(Animals2)

> # 重み関数の形を変えてフィッティングを繰り返す

> for (i in 1:20) abline(rlm(brain ~ body, data=Animals2, maxit=100,

+ psi=psi.bisquare, c=i), col=i)

M推定には,残差に関する外れ値にはロバストだが,

説明変数の外れ値にはロバストではないという

問題点がある.

Page 34: Rで学ぶロバスト推定

MM推定という方法を用いると,この問題は解決することが多い.

> plot(Animals2)

> abline(rlm(brain ~ body, data=Animals2, method="MM"), col="red")

Page 35: Rで学ぶロバスト推定

最新の手法が入っているrobustbaseパッケージのlmrob関数を使っても同様の結果が得られる.

> plot(Animals2)

> abline(lmrob(brain ~ body, data=Animals2), col="red")

Page 36: Rで学ぶロバスト推定

高次元のデータに対しては,2次元のデータのように視覚的に外れ値を検出できるわけではない.→ パラメータをチューニングしながら    試行錯誤する必要あり

Page 37: Rで学ぶロバスト推定

1. 自己紹介

2. イントロダクション ~外れ値への対処~

3. ロバスト推定

4. まとめ

Page 38: Rで学ぶロバスト推定

4. まとめ

ロバスト推定とは,外れ値を除去することなく,与える影響が小さくなるようにモデルを推定する方法

M推定法は最も簡単なロバスト推定法であるが,説明変数の外れ値に対してはロバストではない.

各種ロバスト推定法の適用にあたっては,パラメータのチューニングが必要.

Page 39: Rで学ぶロバスト推定

Tokyo.R 翻訳プロジェクトWiki

Tokyo.Rの主催者@yokkunsさんが立ち上げたWikiで,パッケージのTask Viewやvignette,Rの公式マニュアル等のドキュメントを現在,約10名で翻訳中

Please join us!