deepblueインターン生の中山です. 久しぶりの更新となってしまったのですが,今回はTukeyの抵抗直線という手法について説明したいと思います.
[toc]
対象の読者
- 抵抗直線について知らない人
- 統計学の初心者の方
抵抗直線(resistant line)とは
抵抗直線については,文献がかなり少ないため,多くの方がご存じでないと思います.自分が不勉強なのもありますが,文献をあまり見かけないです.また,google scholarで検索しても電気や力学などの物理における抵抗などがヒットしがちです...
一言でいうと,抵抗直線とは『ロバストな単回帰』です.通常の単回帰では,外れ値のような大きなノイズとなるデータに対して,外れ値の除去をしない場合は,良い回帰式を得ることが難しいです.また,「外れ値を除去すれば良いのでは?」と思う方もいらっしゃると思いますが,外れ値は何かしらの理由があって見つかることもあるので,一概に除去すれば良いというわけではありません.そこで,データの誤差や品質の悪さに比較的鈍感な抵抗直線が存在します.
単回帰についてはこちらをご覧ください.
抵抗直線は,残差に線形性が見られるときに,残差を目的変数として単回帰のような計算を繰り返し行うという特徴があります.このことによって,抵抗直線は計算がなされていきます.
計算手順

データの分割
まず,計算するにあたり想定するデータを以下に示します.
x | x_1 | x_2 | x_3 | x_4 | x_5 | x_6 | x_7 | x_8 | x_9 |
y | y_1 | y_2 | y_3 | y_4 | y_5 | y_6 | y_7 | y_8 | y_9 |
また,この与えられたデータの x が x_1<x_2<\cdots<x_9 であるとします( yの大小については不問).
そして,データを3つのサブパッチI, I\hspace{-.3em}I , I\hspace{-.3em}I\hspace{-.3em}I に分割します.
次に,各サブパッチにおける x と y の中央値を (x_I, y_I ),~ (x_{ I\hspace{-.3em}I}, y_{ I\hspace{-.3em}I } ),~(x_{ I\hspace{-.3em}I\hspace{-.3em}I }, y_{ I\hspace{-.3em}I\hspace{-.3em}I } )とします.
すなわち,データは以下のようになります.
サブパッチ | I | I\hspace{-.3em}I | I\hspace{-.3em}I\hspace{-.3em}I |
x | x_1,x_2,x_3 | x_4,x_5,x_6 | x_7,x_8,x_9 |
y | y_1,y_2,y_3 | y_4,y_5,y_6 | y_7,y_8,y_9 |
xの中央値 | x_I | x_{ I\hspace{-.3em}I} | x_{ I\hspace{-.3em}I\hspace{-.3em}I } |
yの中央値 | y_I | y_{ I\hspace{-.3em}I } | y_{ I\hspace{-.3em}I\hspace{-.3em}I } |
今回はサンプルサイズが3の倍数を仮定しているので,3等分にすることができます.ただし,実際には3の倍数でないこともあります.その時は次のように分かれます.
サンプルサイズが3k:すべてのサブパッチがk個ずつ
サンプルサイズが3k+1:サブパッチI\hspace{-.3em}Iをk+1個
サンプルサイズが3k+2:サブパッチI, I\hspace{-.3em}I\hspace{-.3em}I をk+1個
1回目の直線あてはめ
切片の推定値を \hat{a}, 傾きの推定値を \hat{b}と定義します.
この時,傾きの推定値を, \hat{b}=\frac{(y_{I\hspace{-.3em}I\hspace{-.3em}I }- y_I)}{(x_{I\hspace{-.3em}I\hspace{-.3em}I}- x_I) }とします.次に,切片の推定値を,\hat{a}_I=y_I-\hat{b}x_I,~~\hat{a}_{I\hspace{-.3em}I}=y_{I \hspace{-.3em}I }-\hat{b}x_{I \hspace{-.3em}I },~~\hat{a}_{I \hspace{-.3em}I \hspace{-.3em}I }=y_{I \hspace{-.3em}I \hspace{-.3em}I }-\hat{b}x_{I \hspace{-.3em}I \hspace{-.3em}I }と3つ計算し,その平均値を, \hat{a}=\frac{( \hat{a}_I+ \hat{a}_{I\hspace{-.3em}I} + \hat{a}_{I \hspace{-.3em}I \hspace{-.3em}I })} {3}と計算します.このようにして,あてはめられる直線は, \hat{Y}= \hat{a}+ \hat{b}X と求められます.
あてはめを繰り返す
前の手順によって,1回目の抵抗直線のあてはめができました.ただし,1回目の計算が最適な式とはなっていないため,計算を繰り返し行う必要があります.1回目は目的変数Yについて計算を行いましたが,2回目以降は残差Zについて計算を行います.
まず,残差を,z_i=y_i - \hat{y}_i ~~~ (i=1,2, \cdots ,9) と求めます.この結果をもとに,残差 Z に線形のパターンがあるとき(傾きの推定値\hat{b}\neq0)は,1回目のあてはめと同じような計算を行い,Z=a' + b'Xのあてはめについて考えます.その後,あてはめる直線を,\hat{Y}=(\hat{a}+\hat{a}') + (\hat{b}+\hat{b}')X と更新します.
上記の手順を残差に線形パターンがなくなる時まで計算を行い,最終的な抵抗直線の算出を行います.
まとめ
以上で抵抗直線についての説明は終わりです.通常の単回帰よりも外れ値に強い回帰式を得ることができます.また,抵抗直線は説明変数が1次元の時限定ですが,説明変数がいくつかあるデータに対して抵抗直線の考え方を拡張した多重単回帰(Multiple Single Regression)という手法もあります.
参考文献
渡部洋,鈴木規夫,山田文康,大塚雄作(1985):『探索的データ解析入門』,朝倉書店.
(著:中山 翔太)
関連記事
Deepblueでは統計やAIの平和的活用を一緒に取り組んでいただける方を募集してます。詳しくはRecruitをご覧ください。