戯言日記

Rの話だと思ったら唐突にサバゲーが混じってくる何か。

「MAD」が問題を抱えすぎている気がする

一昔前に某動画サイトでうpされていたアレの話とかではなくて。

データの標準化の話を調べていた時、「中央絶対偏差(MAD)」に行き当たったのが事の発端。

doubtpad.hatenablog.com

このMAD、バラつきに関する指標の1つで、標準偏差と比較すると外れ値に強い(ロバストな)性質がある。計算式はこんな感じ。

 \displaystyle
MAD = median|X_i-\overline{X}|

これ自体には何も問題はない。
問題なのは、同じくバラつきを表現する指標にMADと呼ばれるものが存在することである。

どういうことかというと、バラつきの指標には「Median Absolute Deviation(中央絶対偏差)」と「Mean Absolute Deviation(平均絶対偏差)」が存在しており、そのどちらもMADと略されるということである。ややこしいなオイ。

日本語でならまだ判断が付くものの、「MAD」だけでは他に情報がないかぎり判定は不可能。
ちなみに平均絶対偏差はこんな感じで算出する。

 \displaystyle
MAD = \frac{1}{n}\sum_{i=1}^{n}|x_i-m(X)|

ご覧の通り、まったくの別物。
訳分からなくなるんだから、「Average Absolute Deviation」とかにすればいいじゃんと思う。



en.wikipedia.org

あるのかよ。
とりあえず内容確認(概要から引用)。

The average absolute deviation (AAD) of a data set is the average of the absolute deviations from a central point. It is a summary statistic of statistical dispersion or variability.

訳:AADは中心点からの絶対偏差の平均値で、分散の要約統計量です。

なるほど、平均絶対偏差だな。

In the general form, the central point can be a mean, median, mode, or the result of any other measure of central tendency or any reference value related to the given data set.

訳:中心点としては平均値や中央値、最頻値、その他にもデータセットから得られる中心なら何でも使えます。

なるほど、平均絶対偏差だな。

AAD includes the mean absolute deviation and the median absolute deviation (both abbreviated as MAD).

訳:AADはMADの両方を含みます。

なるほど分からん。
平均だと思って読み進めてたからマジで混乱したわ。

なお、直後の「Measures of dispersion」の項目では「平均値周りの平均絶対偏差と中央値周りの中央絶対偏差は両方ともMADで混乱する上に計算結果も全然違う」「偏差の算出方法と中心点の設定、この2つの組み合わせが複数あるからAADは一意に計算値を表すものではない」と解説されている。

つまり、ここでの「Average」とは「中心値」を示しており、AADについては「中心絶対偏差」とでも訳すのが比較するのにちょうどいいと思われる。
すると、2種類のMADが含まれるのも納得できる1

また、この2つの呼び分けについてだが、個人的にはIBMこのページのように「MAD」と「MeanAD」のような形で使い分けると、後で見直した時の混乱を最小限に抑えられて良さそう。

補足だが、この項目より、最後の処理として「平均値」と「中央値」(=MeanとMedian)のどちらを採用するかによって、どちらのMADになるか決まるとある。
どういうことかというと、中心点の設定方法は偏差の呼び方に影響しない
そのため、どういう処理を行っているのかについては解析内容をしっかりと確認する必要がある。


ちなみに、Rにはmad()という関数が最初から入っている。
これで得られる値は中央絶対偏差なのだが、「標準偏差の推定量としてのMAD」を計算しているため、

 \displaystyle
MAD = median|X_i-\overline{X}| \\
k = 1/qnorm(0.75) \approx 1.4826

を用いて、

 \displaystyle
\hat\sigma = k ・ MAD

である \hat\sigma を計算結果として返してくる2

また、median()とabs()を用いてMADの計算を自前で実装した場合の値と、mad()のデフォルトでの返り値を比較すると、近似地である k = 1.4826 を用いて計算していることが確認できる3

# MADの算出
iris[[1]] %>% mad()

# 値を比較すると、近似値を用いて計算した場合と一致している
iris[[1]] %>% { median( abs(. - median(.)) ) / qnorm(0.75) }
iris[[1]] %>% { median( abs(. - median(.)) ) * 1.4826 }


以上、あまり出番は無いかも知れないけど、ロバストな指標を用いている場面で「MAD」と見えたら、「中心値」と「中心点」に注意した方がいいというお話しでした。

Enjoy!!



~おまけ~

ここまでの話の流れがあった上で日本語版のWikipediaを見てみる。
が、そもそも日本語版だと平均絶対偏差などは単独での記載ページはない

で、一応は「偏差」の中の項目として記載されているのだが。

ja.wikipedia.org

そもそも中央絶対偏差については記述自体が存在しない。
サイト内検索をしてみると、「対数コーシー分布」のページのパラメータの推定で言及があるくらい。

かなりしっかりと記載されている英語版とは情報量が桁違いなので、日本語で読みたい場合はおとなしくWikipedia以外で情報収集した方がいい。


  1. ちなみに、AADのWikiをスクロールしていくと下の方に「Maximum absolute deviation」という項目を見つけて身構えてしまうが、厳密にはバラつきの指標ではないとのこと。

  2. 厳密(?)な意味でのMADが必要な場合はパラメータで「constant=1」を指定すれば得られる。

  3. mad()のパラメータに「constant=1.4826」とあるので、ぶっちゃけ敢えて検証するほどのことではないのだが、確認しないと何となく落ち着かなかった。