★ マハラノビス距離の正負について ★

 106 マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 00:29
  110 Re: マハラノビス距離の正負について  マンボウ  1999/09/28 (火) 02:20
   118 Re^2: マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 09:18
    120 Re^3: マハラノビス距離の正負について  青木繁伸  1999/09/28 (火) 15:10
     121 Re^4: マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 19:35
      122 Re^5: マハラノビス距離の正負について  青木繁伸  1999/09/28 (火) 20:58
       123 Re^6: マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 21:48
        125 Re^7: マハラノビス距離の正負について  青木繁伸  1999/09/29 (水) 12:12
         127 Re^9: マハラノビス距離の正負について  青木繁伸  1999/09/29 (水) 18:26
          128 Re^10: マハラノビス距離の正負について  中村 知道  1999/09/29 (水) 18:43
           129 Re^11: マハラノビス距離の正負について  青木繁伸  1999/09/29 (水) 22:16
            130 Re^12: マハラノビス距離の正負について  中村 知道  1999/09/29 (水) 23:29
             131 Re^13: マハラノビス距離の正負について  マンボウ  1999/09/29 (水) 23:40
              132 Re^14: マハラノビス距離の正負について  中村 知道  1999/09/29 (水) 23:53
               133 Re^15: マハラノビス距離の正負について  マンボウ  1999/09/30 (木) 00:24
                135 Re^16: マハラノビス距離の正負について  中村 知道  1999/09/30 (木) 11:18


106. マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 00:29
500字で書ききれなかったので,別の掲示となりました.宜しくお願い致します.

マハラノビス距離の計算をしていくと分散・共分散行列が12×12より大きくなったときに,負のマハラノビス距離が出て来てしまいました.
行列が12×12より小さい時には負のマハラノビス距離は見られませんでした.
距離で負の値が出てくるのはなんだかおかしな気がしますので,自分のプログラムミスなのではないかと考えております.
それとも,負のマハラノビス距離が出てくるのはありえる話なのでしょうか?

アドバイス宜しくお願い致します.m(_ _)m

     [このページのトップへ]


110. Re: マハラノビス距離の正負について  マンボウ  1999/09/28 (火) 02:20
> 距離で負の値が出てくるのはなんだかおかしな気がしますので,自分のプログラムミスなのではないかと考えております.

プログラムミスの可能性は大きいとは思います。
どのような環境で,どのような言語を使ってプログラムしているのでしょうか。
C だと,簡単に Segmentation fault なんかでますからね。

もう一つの可能性ですが,マハラノビス汎距離を求めるときに,分散共分散行列の逆行列を求めますよね。そのときに,行列が特異行列に近いと,逆行列が不安定になっていることも考えられます。
どのようなデータを与えても12変数以上のときに必ず負の値が出るのですか?

全文検索でマハラノビスの汎距離を検索してみると,
http://aoki2.si.gunma-u.ac.jp/lecture/Discriminant/mahalanobis.html
に,Excelによるマハラノビスの汎距離の計算例が書いてありました。
Excelで手計算して比較してみるといいかも。

     [このページのトップへ]


118. Re^2: マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 09:18
マンボウさん,お返事有難うございます.

> プログラムミスの可能性は大きいとは思います。
> どのような環境で,どのような言語を使ってプログラムしているのでしょうか。
> C だと,簡単に Segmentation fault なんかでますからね。

逆行列の計算以降ははMATLABを使っています.
分散・共分散行列までは C で組んでいます.
単に分散と共分散を求めるだけで簡単なので.

> もう一つの可能性ですが,マハラノビス汎距離を求めるときに,分散共分散行列の逆行列を求めますよね。そのときに,行列が特異行列に近いと,逆行列が不安定になっていることも考えられます。
> どのようなデータを与えても12変数以上のときに必ず負の値が出るのですか?

12変数以上のときに負の値が出たり出なかったりします.
分散・共分散行列を作る段階で間違っているのではないかと思い,何度もチェックしたのですが見つけられないんです.

あと,多変量解析の本に出てる例題を解いてみたのです,本に出ている結果と同じ結果になりました.
ますます困ってしまってます.
アドバイスがありましたら宜しくお願い致します.

     [このページのトップへ]


120. Re^3: マハラノビス距離の正負について  青木繁伸  1999/09/28 (火) 15:10
> あと,多変量解析の本に出てる例題を解いてみたのです,本に出ている結果と同じ結果になりました.
> ますます困ってしまってます.
> アドバイスがありましたら宜しくお願い致します.

http://aoki2.si.gunma-u.ac.jp/JavaScript/maharanobis.html
に,1群の場合で,各ケースから平均値までのマハラノビスの汎距離を求める JavaScript プログラムを掲載しました。

また,
http://aoki2.si.gunma-u.ac.jp/BlackBox/BlackBox.html
の判別分析では,各群の平均値までのマハラノビスの汎距離を表示します。

負の値の出るデータをこれらのプログラムに食わせてみてください。

     [このページのトップへ]


121. Re^4: マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 19:35
青木様,お返事有難うございました.

> http://aoki2.si.gunma-u.ac.jp/BlackBox/BlackBox.html
> の判別分析では,各群の平均値までのマハラノビスの汎距離を表示します。
> 負の値の出るデータをこれらのプログラムに食わせてみてください。

早速,試してみたところ,負のマハラノビス距離は出てきませんでした.
結果を見たところ,出力された平均値は私も同じものでしたが,1つ私の計算と大きく異なる点があることに気付きました.
それは,私は単純にマハラノビス距離を求める際,分散・共分散行列を用いているのに対し,青木さんの計算ではプール後の相関係数行列を用いていることです.
私の方ではプールしない分散・共分散行列を用いておりました.
また,プールしない相関係数行列を用いて再度私の方で計算してみましたが,同様に負のマハラノビス距離が出て来てしまいました.
もしかしたら,行列計算に用いている MATLAB の方の問題ではないかと感じ出しております.
お手を煩わして申し訳ありませんが,何卒お願い致します.

     [このページのトップへ]


122. Re^5: マハラノビス距離の正負について  青木繁伸  1999/09/28 (火) 20:58
> それは,私は単純にマハラノビス距離を求める際,分散・共分散行列を用いているのに対し,青木さんの計算ではプール後の相関係数行列を用いていることです.
> 私の方ではプールしない分散・共分散行列を用いておりました.

プールするかしないかは,線形判別関数を求めるか二次の判別関数を求めるかの違いになります。Black-Box では線形判別関数を求めているのですね。

分散共分散行列から出発するか相関係数行列から出発するかは判別係数が先に求まるか標準化判別係数が先に求まるかの違いになりますが,両者は後で相互に変換できるので,どちらが先に求まるかは問題ないです。しかし,計算精度の点で言えば相関係数行列からの方が望ましい場合が多いです(逆行列計算のときのぴぼっと選択において,極端に大きさの違う要素が存在すると結果が不安定になる)。

しかし,

> また,プールしない相関係数行列を用いて再度私の方で計算してみましたが,同様に負のマハラノビス距離が出て来てしまいました.

ということなので,ちょっと理由がわかりません。

まさか MATLAB にバグがあるとも思えないのですが。
ちょっと考えさせてください。

     [このページのトップへ]


123. Re^6: マハラノビス距離の正負について  中村 知道  1999/09/28 (火) 21:48
青木様,度々お返事有難うございます.

>> また,プールしない相関係数行列を用いて再度私の方で計算してみましたが,同様に負のマハラノビス距離が出て来てしまいました.
> ということなので,ちょっと理由がわかりません。
> ちょっと考えさせてください。

すいません.本当に有難うございます.

> まさか MATLAB にバグがあるとも思えないのですが。

私は明日にでも自分でC言語で行列計算の部分も組んで,試してみようと思っております.
もし,これで負のマハラノビス距離が出なければ MATLAB のバグの可能性が出てきますし.
実は変量の数が多くなると負のマハラノビス距離が出てしまったという点が非常に引っかかっております.
もし,私の分散・共分散行列をつくるソフトが間違っていれば,変量の数が少ない時からおかしな結果が出てくる思いますので.

     [このページのトップへ]


125. Re^7: マハラノビス距離の正負について  青木繁伸  1999/09/29 (水) 12:12
http://aoki2.si.gunma-u.ac.jp/BlackBox/BlackBox.html
に,二次の判別関数を加えました。
問題の起きるデータを分析してみて,途中の結果を比較してみてください。

各群の分散共分散行列を求める際に,変動共変動を「ケース数-1」で割ったものを使っています。
これは,各群の分散共分散行列が等しいとする「線形判別関数」のときにプールした分散共分散行列を求めるときに,プールした変動共変動を「プールしたケース数-群の数」で割ることに対応させているのです。
しかし,変動共変動をケースで割る方がすっきりしているかなとも思います。

どちらがいいと思いますか>ALL

     [このページのトップへ]


127. Re^9: マハラノビス距離の正負について  青木繁伸  1999/09/29 (水) 18:26
> あと,1つお願いがあるのですが,もしよろしければ,単なる分散・共分散行列をもとめる関数も加えていただけないでしょうか?

http://aoki2.si.gunma-u.ac.jp/JavaScript/maharanobis.html
では,分散・共分散行列も出力しますが?

> 青木さんの相関係数行列もそうですが,分散・共分散行列も対称行列なので見やすくするために同じ値の部分は省いてあるのですよね?

その通りです。

     [このページのトップへ]


128. Re^10: マハラノビス距離の正負について  中村 知道  1999/09/29 (水) 18:43
青木様,本当に有難うございます.

> http://aoki2.si.gunma-u.ac.jp/JavaScript/maharanobis.html
> では,分散・共分散行列も出力しますが?

早速試してみました.幸いにして分散・共分散行列は私が計算したものと同じでした.

さて,基本的な質問で恐縮なのですが,上記の関数で計算させた際,変数の個数よりデータのが少ないと逆行列が求められないと表示されました.これはなぜでしょうか?
おそらく非常に基本的なことなのだと思いますが,何卒宜しくお願い致します.
今さっき上記の関数でこれが表示されて,これが原因であるように思いました.
Matlab では全く表示されなかったことなので,全く気付きませんでした.
お手数ですが,宜しくお願い致します.

     [このページのトップへ]


129. Re^11: マハラノビス距離の正負について  青木繁伸  1999/09/29 (水) 22:16
> 変数の個数よりデータのが少ないと逆行列が求められないと表示されました.これはなぜでしょうか?

あ〜,それが原因です。まさか,そういう状況にあるとは思いませんでした。

「データ数」>「変数の個数」であることは,必須条件です(この条件に反していると言うことは考慮の外でした)。
分散・共分散行列,相関係数行列のランク(階数)が変数の個数より小さくなるのです。
別の言葉で言えば,一次従属な行列(あるいは正定値行列でない行列)になってしまうと言うことです。

上の条件が満たされないとき,分散・共分散行列(相関係数行列も)は必ず一次従属になってしまいます。このようなデータのを多変量分析する場合,たいていの分析手法の中には逆行列を求める操作があり,その計算中で,「Singular matrix」というエラーメッセージを吐いてプログラムは停止するべきです。
ちなみに,このような行列では,正の固有値の個数はランクの数だけしか得られません。

MATHLAB に,以下のような3行3列の一次従属な行列を与えてやるとどうなりますか?
1    2    3
2    5    6
3    6    9
上に示す URL にも,逆行列を求める JavaScript をおいてあります。

     [このページのトップへ]


130. Re^12: マハラノビス距離の正負について  中村 知道  1999/09/29 (水) 23:29
青木様,いつも素早いお返事有難うございます.

>>変数の個数よりデータのが少ないと逆行列が求められないと表示されました.
>あ〜,それが原因です。まさか,そういう状況にあるとは思いませんでした。
>「データ数」gt;「変数の個数」
>であることは,必須条件です。(この条件に反していると言うことは考慮の外でした)

データ数>変数の個数 は基本中の基本で,これを前提に全ての計算が成り立っていたんですね.知りませんでした.私の不勉強でした.

MATLAB で
 1    2    3
 2    5    6
 3    6    9
の逆行列を求めてみたところ,
Warning: Matrix is singular to working precision.
 Inf   Inf   Inf
 Inf   Inf   Inf
 Inf   Inf   Inf
という結果が出てきました.
今まで私が行ってきた計算では“逆行列の計算”だけは恙無く出来ていたんですね.
本質的な意味はMATLABに分かるはずもないわけですから,私の方でしっかりと データ数>変数の個数 を把握しておくべきでした.
今回の件は私にとって本当によい勉強になりました.
色々とお手を煩わして本当に申し訳ありませんでした.
本当に有難うございました.

     [このページのトップへ]


131. Re^13: マハラノビス距離の正負について  マンボウ  1999/09/29 (水) 23:40
> 今まで私が行ってきた計算では“逆行列の計算”だけは恙無く出来ていたんですね.

よかったですねというか,おかしいですねというか

負のマハラノビスの距離の出るデータで,MATLABが計算した逆行列の出力はできますか?もし,できるなら,出てきた逆行列と元の行列を掛けると,単位行列になりますか?

また,もし,変数の個数がデータの個数より大きい簡単なデータを作って(例えば,五変数,三データ),それを解析したときに負のマハラノビス距離が出るかどうかためしてみるとか。

たとえば,
2 4 3 4 5
3 2 4 3 1
4 3 2 5 2
を,このスレッドで紹介された
http://aoki2.si.gunma-u.ac.jp/JavaScript/maharanobis.html に入力すると,

  逆行列が求まりませんでした
  変数の個数よりデータの個数が大きくないといけません

というエラーメッセージが出ましたけど

     [このページのトップへ]


132. Re^14: マハラノビス距離の正負について  中村 知道  1999/09/29 (水) 23:53
マンボウさん,お返事有難うございます.

>もし,できるなら,出てきた逆行列と元の行列を掛けると,単位行列になりますか?

ほぼ単位行列になっていました.

あと,マンボウさんに言われた行列を掲示に書かれていたアドレスに入力して分散・共分散行列を求め,それをMATLAB に入力してその逆行列を計算してみたところ,
Warning: Matrix is close to singular or badly scaled.
         Results may be inaccurate. RCOND = 7.421444e-035.
1.0e+033 *

     0   -0.0000   -0.0000   -0.0000    0.0000
     0   -0.0000   -0.0000   -0.0000    0.0000
0.0000    0.0000    1.1441    1.1441   -0.0000
0.0000    0.0000    1.1441    1.1441   -0.0000
     0   -0.0000   -0.0000   -0.0000    0.0000
といった結果が出てきました.
MATLAB の場合,かなり強引というか強力に計算してしまうようですね.
どちらにしても,基本をしっかし把握して MATLAB のような便利なソフトを使わないと,計算結果は出るけども結果が合っているのかないのかが分からなくなってしまうんですね.
今回の私がまさにそれです.お恥ずかしい限りです.

     [このページのトップへ]


133. Re^15: マハラノビス距離の正負について  マンボウ  1999/09/30 (木) 00:24
> あと,マンボウさんに言われた行列を掲示に書かれていたアドレスに入力して分散・共分散行列を求め,それを MATLAB に入力してその逆行列を計算してみたところ,

出力された逆行列の有効桁数が足りないのでどうとも言えないですが,元の分散共分散行列を掛けると,単位行列にはならず,0行列になりました。

前の私のコメントはそういうことではなく,「あのデータを中村さんの作ったプログラムに入力したら,負のマハラノビス距離が出るでしょうか?」ということなのですが。

     [このページのトップへ]


135. Re^16: マハラノビス距離の正負について  中村 知道  1999/09/30 (木) 11:18
マンボウさん,コメント有難うございます.

> 前の私のコメントはそういうことではなく,「あのデータを中村さんの作ったプログラムに入力したら,負のマハラノビス距離が出るでしょうか?」ということなのですが。

失礼致しました.
結果ですが,負のマハラノビス距離は出ませんでしたが,馬鹿でかい値が出力されました.
以前の私の方での結果も常に負のマハラノビス距離が出ていたわけではないので,負の値が出るにはなんらかの条件が必要なのだろうと思います.
また,“データ数>変数の数”を満たしているときは私の方では負のマハラノビス距離も意味不明に近いと思われるような馬鹿でかい値も出てきません.

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 003 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る