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