日本橋濱町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変数をどのように考慮するかは後ほど^^