日本橋濱町Weblog(日々酔亭)

Quality Economic Analyses Produces Winning Markets

条件付ロジットモデルの推定2:CLM推定用データの作成

具体的な例で示すと以下のとおり。

  • サンプル数(グループ数):N=5000。
  • 選択肢(モード)の数:J=3(光ファイバADSL、ケーブルインターネット)。
  • 観測値の数:N×J=15000。

このとき、データの構造は、第一列に光ファイバの選択肢、第二列にADSLの選択肢、第三列にケーブルインターネットの選択肢に関係するデータが入ることとなる。

またここでは2つのダミー変数が所与の選択肢を示すために使われる。例えば、光ファイバダミー変数は光ファイバについての選択情報が含まれる第一列に入り、そこが「1」、その他の列では「0」となる。ADSLダミーは、ADSLについての選択情報が含まれる第二列に入り、そこが「1」、その他の列では「0」となる。

さらに実際に選択されたモードを表す変数(choice)が作られる。それは選択したモードの列に「1」が入り、他は「0」となるものである。またmodeという変数により各選択肢を表す。ここでは「1」は光ファイバ、「2」はADSL、「3」はケーブルインターネット。

グループを特定するためにグループ変数が必要となる(ここではid)。ブロードバンドユーザは1ユーザ(グループ)につき、3つの列で構成される。一つのグループが一つのcaseということになる。

ここではalternative-specificな変数(AS変数)は、速度と価格。これらは選択肢とグループによって変わる変数である(疑問:選択されない選択肢の速度と価格は、平均値や最大値を入れている。それでASになっているのであろうか)。

実はこのAS変数を考慮し、ケースごとにデータセットを作成するのにいつも苦労していた。それはエクセルにしろ、Stata等の統計ソフトにしろ、横に変数を増やすのは簡単なのだが、今回の場合だと各ケース分のデータを増やすのは簡単には出来ない。

今までは以下のようにしていた(エクセルでやるのもStataでやるのも手順は同じ)。

  1. オリジナルのデータセットをケース分コピーする(今回の場合は光ファイバADSL、ケーブルインターネットだから3つ)。オリジナルのデータセットはとっておく。
  2. 各データセットに関して、AS変数に該当するデータを入れる。例えば、光ファイバのファイルでは速度変数のところに100M、ADSLなら50M、ケーブルインターネットなら30Mという具合。価格も同じように入れる。その他のAS変数も同様にする。
  3. モード変数やダミー変数も各ファイルごとに作る。
  4. そのファイルをappendコマンドで合成する。
  5. ケース変数であるcaseと選択肢を表すmode変数でソートする。

これで分析用のデータセットが出来上がる。

ところがStataではそれを一発コマンド(case2alt)で処理してくれる・・・便利だ。

case2altを使うときはオリジナルのデータセットにAS変数を選択肢ごとの変数として作成しておく必要がある。例えば、速度なら、「速度1」変数は光ファイバ用で100M、「速度2」変数はADSL用で50M、「速度3」変数はケーブルインターネット用で30Mという具合。変数名「速度」のあとの数字は、modeの数字に対応する。この数字から各ケースのデータとして割り当てる。またchoice変数はこの場合は、0,1ではなく、選択肢したケースの番号が入る。

case2altのsintaxは次のとおり。

.case2alt, {choice(varname) | rank(subname)} [alt(subnames) casevars(varlist) case(varname) replace altnum(varname) nonames]

各オプションは次のとおり。

choice(varname),rank(varname):必須。ランキングがないデータの場合は、choice()で選択された選択肢の値を特定。今回、rankは関係ないので無視。
atl(stubnames):これでAS変数を特定する。
casevars(varlist):CS変数を特定。ここにid変数等を含んではいけない。
case(varname):ケースを特定する変数を指定。ここではid。
generate(newvar),replece:選択された選択肢を特定する変数を作成ないし再構成する。今回はchoiceがあるのでOK。
その他は省略。

詳しくは下記文献の296ページを参照のこと。

case-specific変数をどのように考慮するかは後ほど^^

条件付ロジットモデルの推定3:CS変数の考慮

CLMでCS変数を考慮するには、独立変数、つまりCS変数を交差項として再設定する必要ある。この考え方の詳細は以下のlongの文献(1997、181ページ)を参照のこと。

アカデミックな関心点としては次の2点。

  • CSおよびAS変数の両者を含んだ混合モデルの可能性を開く
  • MNLMでは出来なかったパラメータへの制約をかけることが出来る

データのセットアップ


CS変数だけのデータセットでCLM推定を行なう場合は、CS変数と選択肢別ダミー変数の交差項を作る。

この手続きは、先ほどのcase2altコマンドで簡単に出来る。

.case2alt, casevars(varlist) choice(varname) gen(new_varname)

例えば、所得変数(income)をCLM用のデータにするには以下のとおり。
case2altを使う前に交差項にする変数を指定しておく必要がある。

label define varname 1 "ftth" 2 "adsl" 3 "catv"を使う。
これに基づいて交差項に用いるダミー変数が作成される。

その後に下記のコマンドを使う。

.case2alt, casevars(income) choice(vername)

これでCS変数の交差項変数が出来上がり。

条件付ロジットモデルの推定4:CLMの推定

CLMは、いくつかの選択肢の中からの選択がケース間で異なる選択肢の特徴にどのように影響されるかを明らかにできる。

ここで観測された結果mの推定選択確率は以下の式で表される(数式はまだ不完全です)。


Pr(y_{i}=m|z_{i})=\frac{\exp(z_{im}\gamma)}{\sum_{j=1}^{J}\exp(z_{ij\gamma})} for m = 1 to J

ここでz_{im}はケースi、選択肢mの説明変数の値である。γが推定されるべきパラメータ。

CLMのSyntaxは以下のとおり。

clogit depvar [indepvars] [if] [in] [weight], group(varname) [constraints(constraints) robust cluster(varname) level(#) or]

オプションの解説

group(varname):必須。ケースを特定する変数。
constraints(clist):推定値間の線形制約を指定。デフォルトは制約なし。
robust:ロバストな分散の推定値。cluster()が使われた場合、ロバストな標準誤差が自動的に使われる。詳細は第3章参照。
他は省略。

例えばこんな感じ。

clogit choice d1 d2 d3 d4 d5 price speed1 incomed1 incomed2 incomed3 incomed4 incomed5, group(samplenum)

推定結果はこんな感じ。エクセルに貼り付けて整形したものです。

この結果を見ると、まず選択肢別のダミー変数が5つ入らなければいけないところが、4つまでしか入りません。これは5つ入れると収束しないためです。またいろいろ試して気がついたのですが、入れるダミー変数によって擬似決定係数の値がかなり変わります。

ここで上げている例では、Pseude R2が0.7732ですが、最大0.9ぐらいまであがります。これまでいろいろな文献を見てきて、擬似決定係数がここまで高いのはあまり見たことがないので、ちょっと「?」というところです。

擬似決定係数がいいので、当然、各変数のz値も問題なく通っています。また速度と料金、所得の符号条件も問題ありません。

ダミー変数が一つ入らないというのを除けば、満足のいく推定結果なのですが、ここまで推定結果がよい、かつダミーが一つ入らないというのはちょっと気にかかるところです。

条件付ロジットモデルの推定5:サンプル数について

通常の仮定(詳細はCramer 1986, Eliason 1993を見よ)の下では、最尤推定量は、consistent, efficient, asymptotically normalである。これらの特性はサンプルサイズを無限大に近づけることで維持できる。


最尤推定量はスモールサンプルのとき必ずしも悪い推定量ではないが、ここでのモデルに関する最尤推定量の小標本挙動はほとんど分からない。そこでLong(1997 54頁)では以下のようなガイドラインを提案している。

500以上のサンプルが妥当である一方、100以下のサンプルでの最尤法は危険である。それらの値は、モデルやデータの特徴によって上げられるであろう。

  1. 多くのパラメータがある場合、より多くの観測値が必要になる。少なくともパラメータあたり10個の観測値が合理的であるというルール*1
  2. 仮にデータの条件が悪い場合(例えば、説明変数間の相関が非常に高いなど)、あるいは被説明変数にほとんど幅がない場合(観測結果がほとんど1の近辺にある場合など)、より大きなサンプルが必要とされる。
  3. ここでは関係なさそうなので省略

さてこのときのサンプルとはデータを加工する前の生データでのサンプル数。

ひどい文章だが、ご勘弁を。

さて、恐らく最低500サンプルというのも、選択肢の数とか、考慮する説明変数の数で、500サンプルでは当然少ない場合もでてくるであろう。

Longの提案から想像できるのは、満足のいく推定作業を行なうためには、

  • サンプルが十分であること、そして
  • 選択肢間の特徴が明確であり、それに
  • 説明変数もバラエティがあること

がポイントになるということであろうか。

そういう視点から、アンケート調査を設計すること、また収集されたデータをモデルの推定前に特徴をよく把握しておくことが作業を効率的に進めるためには重要ということになる。

*1:但し、仮に2つのパラメータしかなかった場合、最小で100はいらないということをこれは意味するものではない。