January 8, 2017

nlogitトラブルシューティング

25分かかってようやくnlogitの推定結果が出ました。いくつかエラーに見舞われ、ウェブで検索しても満足な回答がなかったので、備忘録がてらつけておきます。基本的なマニュアルはこちらを参照。

note: xxxx cases (yyyy obs) dropped due to no positive outcome or multiple positive outcomes per case

nested logitは一つの個体に対して、当たり前ですが一つの選択肢しか認めません。最初はnlogtiのoption部分で ", case(id)"としていたのですが、今回はイベントヒストリーを走らせているので、一つの個体が複数のリスク期間を経験しています。したがって、個人*時間通りのidyear変数を別途作らないと、以上のようなエラー(というか忠告)が出て、大部分のケースが除外されてしまいます。

at least one alternative of var2 is contained in multiple alternatives of var1; this is not allowed

var1がtreeのレベル1とします(レストランのタイプなど)、var2が具体的な選択肢(店名)とします。var2が複数のvar1のカテゴリに入っている場合、以上のようなエラーが出ます。単純に用いる変数をミスっていました。ある個体が4つの最終的な選択肢を持つ時、分析に用いるケースは個体*4に等しくなります。実際には、その4つの選択肢のうち、どれか1つが個体によって選択されます。

note: branch 1 of level 1 is degenerate and the associated dissimilarity parameter ([first_tau]_cons) is not defined; see help nlogit for details

選択肢が一つしかネストされていない場合、以上のような警告が出ます。ここで必要な作業は、一つしかサブカテゴリがない選択肢に関して、以下のような制約をかけることです。

constraint 1 [altvar1_tau]_cons = 1

altvar1は、var1の選択肢です。最初の1はラベルに等しいので、数字ならなんでも良いはずです。後者の1は、dissimilarity parametersの係数を1に固定するという指示です。nlogitの際には、オプションのところにconstraints(1)のようにします。
先のようなnoteが出てしまいますが、事前にこのような処理をしていれば、推定結果は以下のようになります(処理をしても警告は出るので驚かないでください)。degenerateは割とよく発生する事態ですが、先のマニュアルには具体的な対策については書いていません。制約をかけないと、all constraints are invalidというエラーが出てしまうかと思います。

      choice |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
(省略)
dissimilarity parameters
type         |
  /first_tau |          1  (constrained)
 /second_tau |  -2.361679   .0556322                     -2.470716   -2.252642




No comments:

Post a Comment