Rで学ぶロバスト推定 2011年4月29日 第13回Tokyo.R @sfchaos
Rで学ぶロバスト推定
2011年4月29日第13回Tokyo.R
@sfchaos
本発表の趣旨
分析データには外れ値がつきもの
外れ値?
分析データには外れ値がつきもの
外れ値? 本当に外して良い?
分析データには外れ値がつきもの
外れ値? 本当に外して良い?
ロバスト推定とは,外れ値を除外せずに,受ける影響を小さくして頑健なモデルを推定する方法
本発表では,ロバスト推定の初歩についてお話します.
目次
1. 自己紹介
2. イントロダクション ~外れ値への対処~
3. ロバスト推定
4. まとめ
1. 自己紹介
2. イントロダクション ~外れ値への対処~
3. ロバスト推定
4. まとめ
1. 自己紹介
TwitterID: @sfchaos
職業:コンサルタント 金融工学のモデル構築・データ解析
最近,大規模データ解析の企画に着手(Hadoop, Mahout, CEP等)
「Rパッケージガイドブック」(東京図書,2011年4月刊行)に記事を書かせてもらいました. bigmemoryパッケージ(大規模データの管理・分析)
RTisean/tseriesChaosパッケージ(非線形(カオス)時系列解析)
1. 自己紹介
2. イントロダクション ~外れ値への対処~
3. ロバスト推定
4. まとめ
2. イントロダクション ~外れ値への対処~
動物の体長・脳の大きさに関するデータ(65レコード)
> library(robustbase)
> data(Animals2, package="robustbase")
> plot(Animals2)
2.1 普通に考えると・・・
外れ値を検出して除去する
元データ外れ値の
検出外れ値
外れ値の除去判断
外れ値の除去
データの性質や実務的な観点を考慮
分析対象データ
統計的手法を使用
例)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)
Σ :分散共分散行列
検出された点を除いても良い?
row.names body brain
61 Asian elephant 2547.000 4603.00
62 African elephant 6654.000 5712.00
65 Brachiosaurus 87000.000 154.50
仮に外れ値を除去すると・・・
新しい外れ値(らしきもの)が出現
(screening)
高次元では外れ値の除去は難しい問題orz
2.2 外れ値を除去せずに分析してみる
とりあえずデータをそのまま線形回帰分析に突っ込む
> ans.lm <- lm(brain ~ body, data=Animals2)
> abline(ans.lm, col="blue")
ダメポ。・゚・(ノД`)・゚・。
> ans.lm <- lm(brain ~ body, data=Animals2)
> abline(ans.lm, col="blue")
2.3 そこでロバスト回帰が登場!!
> library(robustbase)
> ans.lmrob <- lmrob(brain ~ body, data=Animals2)
> abline(ans.lmrob, col="red")
望んでいた結果が得られる.
1. 自己紹介
2. イントロダクション ~外れ値への対処~
3. ロバスト推定
4. まとめ
3.1 そもそも線形回帰って?
faithfulデータ(272レコード)
残差
残差の二乗の和が最小となる回帰直線を選ぶ.
∑=
N
iir
1
2min
普通の線形回帰では,
>
残差
3.2 ロバスト推定
ロバスト推定には,M推定法,L推定法,R推定法等が知られている.
今日は,M推定法についてお話します.
簡単のため,データは2次元のものに限って説明します.
3.3 普通の回帰分析とM推定の考え方の違い
線形回帰の場合は,すべての点を同じ重みで考えている.
∑=
N
iir
1
2min 21 ir⋅=
M推定では,モデルへの当てはまりが悪い点の重みを低く設定することにより影響を小さくする.
∑=
N
iir
1)(min ρ※実際は,M推定は
最尤推定の一般化になっているが, ここでは説明を割愛
3.4 実データに対するロバスト推定
① phonesデータセット 1950年~73年までのベルギーにおける電話回数(単位:百万件).
1964年~69年は電話時間が記録されている.
念のため,線形回帰もやってみる.
> phones.lm <- lm(phones$calls ~ phones$year)
> abline(phones.rl, col="blue")
ロバスト回帰 悪くはないが,少し傾きがきつい?
> phones.rl <- rlm(phones$calls ~ phones$year, maxit=100)
> abline(phones.rl, col="green")
重み付け関数を変更する.
> phones.rl <- rlm(phones$calls ~ phones$year, maxit=100, phi=phi.square)
> abline(phones.rl, col="red")
② お待ちかね(?)のAnimals2データセット
線形回帰とロバスト線形回帰 思い通りになっていないけど,phonesデータセットの場合と同じ現象だから大丈夫!
> abline(lm(brain ~ body, data=Animals2), col="blue")
> abline(rlm(brain ~ body, data=Animals2, maxit=100), col="green")
よし,できた! ・・・あれ?
> abline(rlm(brain ~ body, data=Animals2, psi=psi.bisquare), col="pink")
パラメータを変えれば,きっと合うよね
・・・合わないorz
> plot(Animals2)
> # 重み関数の形を変えてフィッティングを繰り返す
> for (i in 1:20) abline(rlm(brain ~ body, data=Animals2, maxit=100,
+ psi=psi.bisquare, c=i), col=i)
パラメータを変えれば,きっと合うよね
・・・合わないorz
> plot(Animals2)
> # 重み関数の形を変えてフィッティングを繰り返す
> for (i in 1:20) abline(rlm(brain ~ body, data=Animals2, maxit=100,
+ psi=psi.bisquare, c=i), col=i)
M推定には,残差に関する外れ値にはロバストだが,
説明変数の外れ値にはロバストではないという
問題点がある.
MM推定という方法を用いると,この問題は解決することが多い.
> plot(Animals2)
> abline(rlm(brain ~ body, data=Animals2, method="MM"), col="red")
最新の手法が入っているrobustbaseパッケージのlmrob関数を使っても同様の結果が得られる.
> plot(Animals2)
> abline(lmrob(brain ~ body, data=Animals2), col="red")
高次元のデータに対しては,2次元のデータのように視覚的に外れ値を検出できるわけではない.→ パラメータをチューニングしながら 試行錯誤する必要あり
1. 自己紹介
2. イントロダクション ~外れ値への対処~
3. ロバスト推定
4. まとめ
4. まとめ
ロバスト推定とは,外れ値を除去することなく,与える影響が小さくなるようにモデルを推定する方法
M推定法は最も簡単なロバスト推定法であるが,説明変数の外れ値に対してはロバストではない.
各種ロバスト推定法の適用にあたっては,パラメータのチューニングが必要.
Tokyo.R 翻訳プロジェクトWiki
Tokyo.Rの主催者@yokkunsさんが立ち上げたWikiで,パッケージのTask Viewやvignette,Rの公式マニュアル等のドキュメントを現在,約10名で翻訳中
Please join us!