No.14840 多重ロジスティックモデル  【banyanyan】 2011/06/25(Sat) 17:33

多重ロジスティックモデルのページに,「最尤法で係数を求める場合には初期値が必要であるが,Truett - Cornfield による判別係数を初期値とすることで,たいていの場合はうまく行く。」と書かれていますが,過去ログ6911でも書かれていたのですが,よくわかりませ ん。
多重ロジスティックモデル(Walker-Duncan 法)のExcel-VBAを見たのですが,
For i = 0 To mp1 - 1
coeff(i) = 0.000000000000001
Next i
となっていて,0.000000000000001で初期化されているようです。これが判別係数なのでしょうか?
サポート終了・自己責任ということなので,質問しにくいのですが,お答えいただければ幸いです。

No.14841 Re: 多重ロジスティックモデル  【青木繁伸】 2011/06/25(Sat) 19:41

> Truett - Cornfield による判別係数を初期値とすることで,たいていの場合はうまく行く。」と書かれていますが,過去ログ6911でも書かれていたのですが,よくわかりません。

「よくわかりません」というのが,どこがわからないのかわからないのですが,引用文献の情報を提示していますよね。それをご覧ください。

J. Truett, J. Cornfield, W. B. Kannel: A multivariate analysis of the risk of coronary heart disease in Framingham. Journal of Chronic Disease, 20 , 511 - 524, 1967.

アルゴリズムの説明はソースプログラム自体ががもっとも正確な説明書なので,それ以上かみ砕いて説明するのはとても苦痛です。
初期値と言えば初期値で,それを元に newton_logist で推定値を求めています。newton 法は,初期値がかなりいい加減でも,正しい推定値を得ることができるとも書いてあります。
なぜ 1e-14 なんて,半端な値を初期値にしたかというのは,newton_logist で収束判定をするところで,
if Abs(coeff0(i) / coeff(i)) > 1e-10 Then
としているので,1回目に0割エラーが起こらないようにするために過ぎません。
な お,VBA は BASIC に過ぎないので,アルゴリズムを記述するには不適切(書くのも不自由)なので,アルゴリズムをたどるなら R や JavaScript のプログラムを見る方が生産的でしょうが,いずれにしても,注釈行も満足に付けていないので,分かりにくいことには変わりないでしょう。それでもという場 合にのみ参照する意味があるのでしょう。
http://aoki2.si.gunma-u.ac.jp/R/lr.html
http://aoki2.si.gunma-u.ac.jp/JavaScript/src/mlogist.html
訳の分からないプログラムを書いてすみません。

No.14844 Re: 多重ロジスティックモデル  【banyanyan】 2011/06/25(Sat) 22:37

早速のお返事本当にありがとうございます。

質問の仕方が悪かったのかもしれません。

判別係数を初期値とする

0.000000000000001に設定されている

判別係数=0.000000000000001
ということ判断でよいのかどうかだけがお伺いしたかっただけなのですが…。

> 初期値と言えば初期値で,それを元に newton_logist で推定値を求めています。newton 法は,初期値がかなりいい加減でも,正しい推定値を得ることができるとも書いてあります。

ということは判別係数とは異なるという理解でよいのでしょうか。

私 が自分で勉強できた範囲で考えたところ,判別係数というと普通判別分析で出てくるもので,分散共分散行列が等しいかどうかによって線形判別関数かマハラノ ビスかに分かれるのではないかと思うのですが,線形判別関数のように思われたので,そうであれば分散共分散行列から判別係数を求める手続きをとるのだと理 解しました。

> アルゴリズムの説明はソースプログラム自体ががもっとも正確な説明書なので,それ以上かみ砕いて説明するのはとても苦痛です。

大 変申し訳ありません。ただ,excel-vba,Rいずれのプログラムを読んでも(これはまだ私の読み込みが甘いのかもしれませんが),対数尤度関数を テーラー展開して2次式で近似するのがプログラムされているニュートン法だと思われますので,itr番目のcoeffをcoeff[itr]とすると,

coeff[itr+1] = coeff[itr] - diff2[itr]の逆行列 * diff1[itr]

こ れをAbs(coeff0(i) / coeff(i)) > 1e-10またはitr<1000の間繰り返すアルゴリズムになっているように思われるのですが,分散共分散行列がどこにも現れないので,判別係 数=0.000000000000001なのかどうかと悩んでいたのです。
自分の理解不足を棚にあげて余計な質問をして本当に申し訳ありません。

No.14845 Re: 多重ロジスティックモデル  【青木繁伸】 2011/06/26(Sun) 06:43

> 判別係数というと普通判別分析で出てくるもので,分散共分散行列が等しいかどうかによって線形判別関数かマハラノビスかに分かれるのではないかと思うので すが,線形判別関数のように思われたので,そうであれば分散共分散行列から判別係数を求める手続きをとるのだと理解しました。

判別分析と言っても,ロジスティック判別分析なので,分散共分散行列などとは関係ありません。

No.14848 Re: 多重ロジスティックモデル  【banyanyan】 2011/06/26(Sun) 13:22

> 判別分析と言っても,ロジスティック判別分析なので,分散共分散行列などとは関係ありません。

以前に高木先生のサイト( http://homepage2.nifty.com/halwin/disc-log.html )の多重ロジスティックモデルの項目に,
 発生率=1/(1+exp[−判別得点])
という記述があったため,判別係数というのは線形判別関数の係数のことだと思ってしまいました。ちがうのですね。

た だ,ロジスティック判別分析についてはネット上では詳しいことがわからず,私の手元にある資料は小西先生の「多変量解析入門」しかなく,そのp.178以 降に記載されている内容を読んでみると,パラメーターの最尤推定はロジスティック回帰分析のニュートン・ラプソン法によるとなっており,現在堂々巡りして しまっている状態です。

私ごとで申し訳ないのですが,仕事の都合上,会社のPCではセキュリティの問題・システムの動作保証などの問題で WinXP+Excelの組み合わせしか選択肢がありません(データの持ち出しももちろん厳禁)。Excelを推奨されていないことは重々承知しておりな がら質問させていただきました。判別係数を求めるvbaを書きかけたのですが…。

No.14849 Re: 多重ロジスティックモデル  【青木繁伸】 2011/06/26(Sun) 14:57

話が混乱しているようですね。

> 判別係数を求めるvbaを書きかけたのですが…。

フッシャーの線形判別分析が書きたいのですか?だったら,
http://aoki2.si.gunma-u.ac.jp/lecture/stats-by-excel/vba/html/sdis.html
正準判別分析のプログラムは VBA では書いていないが,R で書いた
http://aoki2.si.gunma-u.ac.jp/R/candis.html
があります。固有値固有ベクトルを求める関数が必要になるでしょうが,
http://aoki2.si.gunma-u.ac.jp/lecture/stats-by-excel/vba/html/eigen.html
でも。

No.14857 Re: 多重ロジスティックモデル  【banyanyan】 2011/06/27(Mon) 00:03

何度もお返事をいただき本当にありがとうございます。本当に申し訳ありません。

> 話が混乱しているようですね。

状況を整理しておきます。
仕事上使用するものであったため,こちらにあったexcel-vbaをそのまま使用するわけにはいかず,参考にしながら自分で一から書き起こしている最中でした。
そ の途中で,初期値はどうされているのか見てみると,説明では「判別係数を初期値とすることで,たいていの場合はうまく行く」と書いてあったので,判別係数 を求めるように書きかけていたのですが,こちらで書かれている実際のプログラムでは0.000000000000001(1e-14)となっており,これ がどうして判別係数なのかがわからなくなり,過去ログも調べさせていただいたのですが,よくわからずあやふやな質問をしてしまいました。
ところが,

> 判別分析と言っても,ロジスティック判別分析なので,

ということでしたので,そのロジスティック判別分析について調べてみると,小西先生の本では多重ロジスティックモデルのニュートン・ラプソン法等の数値的最適化法によって推定すると書かれていて,スタート地点にもどされてしまったというわけです。
とりあえず書きかけた判別係数を求めるプログラムは捨てるとして,ロジスティック判別分析の判別係数の求め方がわからないので,結局初期値は0.000000000000001(1e-14)しか選択肢がないというのが現在の状況です。

No.14859 Re: 多重ロジスティックモデル  【青木繁伸】 2011/06/27(Mon) 08:55

Truett - Cornfield による判別係数を初期値とすることでたいていはうまくいくし,そこまでしなくて単に適当な値 1e-14 でもうまくいくのですから別に判別係数を求める必要もないということでしょう?

No.14872 Re: 多重ロジスティックモデル  【banyanyan】 2011/06/28(Tue) 00:39

何度もお返事をいただき本当にありがとうございます。

残念ながらTruett - Cornfieldの原文にはまだあたることができていませんが,丹後・山岡・高木三先生共著の「ロジスティック回帰分析」を見るとp.4にCornfieldの方法として,
 p(x) = 1/ 1 + exp[-{log(q/(1-q))+β0+x'β}]
 q = N1/(N1+N0) (N1:発症例 N0:非発症例)
が記載されていましたが,これのことでもないということでしょうか。
これは線形判別関数の係数とはlog(q/(1-q))の分だけ定数項が異なるだけで,分散共分散が利用できるという説明でした。
線形判別関数ではないと仰っているので違うのでしょうか。やはり原文を見るしかないということでしょうか。

No.14874 Re: 多重ロジスティックモデル  【青木繁伸】 2011/06/28(Tue) 07:21

> Truett - Cornfieldの原文にはまだあたることができていませんが,丹後・山岡・高木三先生共著の「ロジスティック回帰分析」を見るとp.4にCornfieldの方法として,
 p(x) = 1/ 1 + exp[-{log(q/(1-q))+β0+x'β}]
 q = N1/(N1+N0) (N1:発症例 N0:非発症例)
が記載されていましたが,これのことでもないということでしょうか。

それでよいでしょう?情報を小出しにされては,振り回されますね。

> 線形判別関数ではないと仰っているので違うのでしょうか

違うなどとは言ったつもりがない。線形判別分析など不要。1e-14 という初期値で,非線形回帰すればそれで十分と書いたつもりですが。


> 判別係数を初期値とする
> ↓
> 0.000000000000001に設定されている
> ↓
> 判別係数=0.000000000000001
> ということ判断でよいのかどうかだけがお伺いしたかっただけなのですが…。
>
> > 初期値と言えば初期値で,それを元に newton_logist で推定値を求めています。newton 法は,初期値がかなりいい加減でも,正しい推定値を得ることができるとも書いてあります。
>
> ということは判別係数とは異なるという理解でよいのでしょうか。

あなたが勝手に 1e-14 が判別係数とか言っているだけで,私はそれは「初期値」だと言っているだけでしょう。「1e-14 が判別係数」などであり得ないのは当たり前なので,私はコメントしていませんけど。

No.14886 Re: 多重ロジスティックモデル  【banyanyan】 2011/06/28(Tue) 22:27

何度もお返事をいただき,本当にありがとうございます。初期値もわかりましたので,本当に感謝です。私が誤解を招く質問の仕方をしたせいで先生に不愉快な思いをさせて本当に申し訳ありません。

さ らに誤解を招くかもしれませんが,私が知りたかったのは「初期値」についてだけなのです。いくつかの資料を読んでプログラムをかくためのアルゴリズムなど はわかったのですが,肝心の初期値については先にあげたいずれの資料のどこにも書いてなかったのです(私の読解不足かもしれませんが…)。
それで先生の書かれたプログラムとその解説のページを見せていただくことにしました。
すると,

プログラムにはきちんと0.000000000000001(Rでは1e-14)と初期値が設定されていること

その解説ページには初期値について「最尤法で係数を求める場合には初期値が必要であるが,Truett - Cornfield による判別係数を初期値とすることで,たいていの場合はうまく行く。」と書かれていたこと

私は質問をさせていただく時点でこれ以外に初期値についての情報を持っていませんでした。この2つの初期値の設定がずれているのではないかと思ったのですが,私の読み込みが不足しているのかと思いました。先生も,

> アルゴリズムの説明はソースプログラム自体ががもっとも正確な説明書なので,それ以上かみ砕いて説明するのはとても苦痛です。

と書かれていましたので,ソースの中で初期値を再設定しているのかと思い,何度も見直したのですが,それが見つけられません。しかしプログラムで初期値が設定されていて,それが解説ページで説明されている事実がある以上私の読みが足りないとしか判断できませんでした。

> 情報を小出しにされては,振り回されますね。

私 は情報を小出しにしたつもりはまったくないのです。なぜなら私の読んだ資料の中に「初期値」についての説明はなかったからです(私の読解力不足も原因のひ とつかもしれませんが,初期値について知っていれば質問はしていないと思います)。丹後先生の書かれているCornfieldの方法というのも初期値につ いての説明ではないと思っていましたので,「それでよいでしょう?」と言われてこれでよいのかと思ったくらいで,そのページには「ロジスティック判別分 析」とも「初期値」とも書かれていませんでしたから。

もうひとつ,これは私が誤解してしまったのですが,

> 初期値と言えば初期値で,それを元に newton_logist で推定値を求めています。newton 法は,初期値がかなりいい加減でも,正しい推定値を得ることができるとも書いてあります。

と 書かれた先生の文章の主語を私が読み違えていました。私は「求めて」いるのも,「書いて」いるのも先生(のプログラムもしくは説明)だと思ったため,どこ に書いてあるのかわからないがどこかに書かれているのだろう,と何度も読み直していたのですが,「書いてあります」の主語はTruett - Cornfieldの原文のことだったということがあとになって理解できました。つまり元の論文には判別係数を初期値にしてもよいし,1e-14のような 初期値でも問題ないという2つのことが書かれていたということですね。

いろいろご迷惑をおかけしました。私の知りたかった初期値の求め方がわかりましたので本当に感謝しております。ありがとうございます。

No.14887 Re: 多重ロジスティックモデル  【青木繁伸】 2011/06/28(Tue) 22:36

> つまり元の論文には判別係数を初期値にしてもよいし,1e-14のような初期値でも問題ないという2つのことが書かれていたということですね。

違います。
Truett - Cornfield は,普通の判別分析に基づいた結果を求めてそれを初期値として非線形回帰を行うということでしょう。
し かし,そんなことをしなくても単に 1e-14 でもよいし,0.5 でもよいかもしれないし 1.23543 でもちゃんと正確な答えが求まるかもしれないということです。たとえ 3.212 の初期値で解が求まらなかったら,他の初期値を設定したら解が求まるだろう,しかし,そういう試行錯誤がいやなら,ある程度真値に近いものを初期値にした らよかろうということ。そのような初期値の候補が Truett - Cornfield の方法によるものというだけのことです。Newton 法って,そういうものでしょう?

No.14889 Re: 多重ロジスティックモデル  【banyanyan】 2011/06/28(Tue) 23:48

早速お返事いただき本当にありがたいのですが,私にはさっぱりわかりません。
ですが,私なりにもう一度考えなおしてみました。

> 違います。

と いうのは,(私の参照した丹後先生の文献で初期値とわからなかったことからの推測にすぎませんが)元の論文に判別係数=初期値という記述があるわけではな く,先生が経験もしくは研究の成果から判別係数を初期にするとたいていの場合うまくいくことがわかったので,解説でそのように説明されているということで よろしいでしょうか。

ただし必ずうまくいくとは限らないのだからいろいろと初期値について試行錯誤することを前提にして,1e-14やその他の初期値でもいいのではないか,ということで「そこまでしなくて」「そんなことをしなくても」と繰り返されていらっしゃるのでしょうか。

た だプログラムとしては判別係数を使うほうがより早く収束して,より真値に近い値になる場合がより多いのであればこちらを採用したほうがよいと私は判断しま す。そういう判断そのものが必要ないと説明いただいているように思いますが,実務上優先順位をつけざるをえない場合もあると思うのですが…。

> Newton 法って,そういうものでしょう?

一 般論ではなくロジスティック回帰分析の対数尤度関数に適用する場合にどんな初期値でもよいということであれば,わざわざ解説ページに判別係数を初期値にす るとたいていうまくいくとは書かれないと思いますし,その解説の説明とここでいただいているように「そんなことをしなくても」いうお返事が私の中でまだ折 り合いがつかない状況です。これは判別分析の話と何か関係があるのかなと昼間考えていたのですが相談できる相手もおらず…。

> 普通の判別分析

> 判別分析と言っても,ロジスティック判別分析なので,分散共分散行列などとは関係ありません。

普通の判別分析をするのであれば分散共分散行列が等しいかどうかを見る必要があると思うのですが,ちがうのでしょうか??
とりあえず,先生も関係ないとおっしゃるので分散共分散行列の相等性については一旦おいて初期値を計算して,テスト作業をします(私はいわゆる職業プログラマではないですが,とはいえひとのプログラムを仕事で勝手に使用することもできませんので自分で書いているだけで)。
仕事上そろそろ計算結果を出して,早く結論をだすようせまられております。判別係数を求めること自体に問題がなければ一旦これで質問を終了させていただきます。
この質問が他の方の参考になっていればいいのですが,過去ログにないということはこんなことで悩んでいるおろかものは私ひとりということでしょうか(笑)。

たびたびの失礼な発言ご容赦いただけると助かります。

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