Stata分析機能例題を利用してもっと知ろう
選択モデル

選択モデル(Choice Models)は、選択の結果を利用するデータのモデルです。
個人や企業などの意思決定者によって、ある選択肢のセットから1つの物や手段が選択されます。
単一の選択をする離散選択モデルと、選択肢をランク付けする順序選択モデルの2種類があります。
離散選択モデルを例に、選択データの操作と要約、モデルのフィット、およびそれらのモデルの結果の解釈に関するコマンドについて解説します。

この例題でできる選択モデル

  • 係数の解釈
  • マージンからの推論
  • 連続共変量の効果
  • カテゴリ共変量の影響
選択モデル 1
選択モデル 2

Stata評価版

最新バージョンのStataをお持ちでない場合は、無料の体験版でお試しいただけます。

doファイルのダウンロード

今回使用するコマンドをまとめたdoファイルです。zipファイルをダウンロード後に展開(解凍)してください。
doファイルは、Stataのメニューの「ファイル > 開く」で開いて使用します。

PDFファイルのダウンロード

このページの内容はPDFでも配布しております。

データの確認

サンプルデータをダウンロードし、データを確認します。
交通機関での移動時間を表す変数traveltimeと待ち時間を表す変数termtimeから、合計移動時間を表す時間変数timeを作成します。

. use https://www.stata-press.com/data/r16/travel, clear
. generate time = traveltime + termtime

データの係数の解釈

通機関の選択を例にデモンストレーションします。
2つの都市間の交通手段(飛行機、電車、バス、自動車)について、210人に調査を行いました。
各交通手段にかかる時間、各個人の所得、一緒に移動する人数に関する情報があります。

cmsetコマンドを使用して、選択モデルのデータであることを宣言します。
変数idは各個人を識別し、変数modeは交通手段の選択肢であることを指定します。

. cmset id mode
cmsetコマンド

次に、被説明変数をchoiceとして、選択された交通手段を示す条件付きロジスティック回帰モデルをフィットします。
共変量のうち変数timeは唯一、4つの交通手段の選択肢間で変化します。
incomepartysizeは、選択肢ごとの値ではなく、個人(またはケース)ごとに1つの値しかないため、casevars()オプションにリストします。

. cmclogit choice time, casevars(income partysize)
条件付きロジスティック回帰モデル

結果から、次のことが分かります。
timeの係数は負であるため、移動時間が長くなると、その交通手段を選択する確率が低くなります。
今回は飛行機を選択肢のベースとして比較しています。
「電車の場合の所得の係数が負である」ことは、所得が増加するにつれて、飛行機よりも電車を選択する可能性が低くなることを示しています。
自動車の場合の移動人数の係数は正です。
一緒に移動する人数が多くなると、飛行機よりも自動車を選択する可能性が高くなることを示しています。

マージンからの推論

上記の結果から、次のことに興味を持ったとします。

  • 飛行機を選択する人の割合は全体の何パーセントか?
  • 所得の影響はどのようなものか?所得が$10,000増加すると、自動車や電車を選択する確率はどのように変化するか?
  • 空港の安全対策が強化され、待ち時間が60分増加した場合、各交通手段の選択の確率にどのように影響するか?

marginsコマンドを使用して、これらについて考察していきます。

予想される選択確率 ― 飛行機を選択する人の割合は全体の何パーセントか?

フィット後にmarginsコマンドを実行すると、各交通手段を選択する平均予測確率が得られます。

. margins
各交通手段を選択する平均予測確率

このモデルと2つの都市間の移動者のランダムなサンプルに基づき、28%の人が飛行機で移動すると予想しています。
また、30%が電車で、14%がバスで、28%が自動車で移動すると予想しています。

連続共変量の効果 ― 所得の影響はどのようなものか?

はじめに、自動車を選択する確率に対する所得の影響を評価します。
marginsat()オプションを使用して、$30,000から$70,000まで$10,000刻みの所得レベルでの自動車移動の予測確率を推定します。

. margins, at(income=(30(10)70)) outcome(car)
自動車移動の予測確率を推定

これらの確率をプロットして、所得の影響を視覚化します。

自動車移動選択確率の所得の影響のグラフ

結果から、自動車を選択する予想確率は、所得が増えるにつれて高くなります。
これらの違いが統計的に有意であるかを調べます。
所得が$10,000増えるごとに、予想される確率の違いをテストします。
marginscontrast()オプションを使用して逆隣接(ar)コントラストを求めます。
また、nowaldオプションとeffectsオプションを使用して、テスト結果の出力を簡略化します。

. margins, at(income=(30(10)70)) outcome(car) contrast(atcontrast(ar) nowald effects)
所得が$10,000増えるごとの自動車を選択する予想確率

この表の一行目から、所得が$30,000から$40,000に増えると、自動車での移動を選択する確率が0.045増加することがわかります。
所得が$40,000から$50,000に増えると、自動車での移動の予想確率が0.035増加します。
これらの効果は両方とも5%の有意水準で有意です。
所得が$50,000から$60,000に、および$60,000から$70,000に増加しても、自動車での移動の確率に大きな違いはありません。

次に、電車を選択する確率に対する所得の影響を評価します。
marginsコマンドのオプションでoutcome(car)の代わりにoutcome(train)を使用します。

. margins, at(income=(30(10)70)) outcome(train)
電車移動の予測確率を推定

これらの確率をプロットして、所得の影響を視覚化します。

. marginsplot
電車移動選択確率の所得の影響のグラフ

結果から、所得レベルが上がると、電車を選択する確率は低くなります。
逆隣接コントラストを使用して、確率の違いを再度テストします。

. margins, at(income=(30(10)70)) outcome(train) contrast(atcontrast(ar) nowald effects)
逆隣接コントラストを使用して確率の違いをテスト

結果から、所得が$10,000増えるごとに、電車を選択する予想確率が大幅に低下することがわかりました。

対象を自動車や電車に限定せず、各交通手段の選択確率が所得によってどのように変化するかを調べる際は、次のコマンドを実行します。
ここでは出力結果は省略します。

. margins, at(income=(30(10)70))

結果をグラフ化すると次のようになります。
ここではnociオプションを使用して信頼区間の表示を省略します。

. marginsplot, noci
各所得レベルでの交通手段の選択確率

このグラフにより、各所得レベルでの交通手段の選択確率を視覚的に比較できます。
所得が増えると、交通手段としてバスや電車を選択する確率が低下し、飛行機や自動車を選択する確率が高くなります。

交通手段の選択予想確率の違いを正式にテストします。
ここでは、$30,000の所得レベルでは、4つの交通手段すべてが等しく選択される可能性があるかを調べます。
marginsコマンドでcontrast(outcomejoint)オプションを使用します。

. margins, at(income=30) contrast(outcomejoint)
$30,000の所得レベルでの交通手段の選択予想確率

結果から、これらの予想確率の少なくとも1つは、他の確率とは大幅に異なることがわかります。
よって、$30,000の所得レベルでは、4つの交通手段すべてが等しく選択されることはありません。

さらに具体的に、所得が$50,000の場合、電車とバスの交通手段を選択する予想確率に違いがあるかを調べます。
marginsコマンドのoutcome()オプションでこれら2つの交通手段を指定し、contrast(outcomecontrast(r))オプションで2つの確率の差を推定します。

. margins, at(income=50) outcome(bus train) contrast(outcomecontrast(r) nowald effects)
$50,000の所得レベルでの交通手段の選択予想確率

結果から、この所得レベルではバスと電車の交通手段を選択する確率に有意差は見られません。

カテゴリ共変量の影響

これまでは連続変数incomeを使用しましたが、代わりにカテゴリ変数の効果を評価する場合の方法を紹介します。
はじめにxtileコマンドを使用して、incomeの四分位数を表す新規変数income_catを作成し、適当なラベルをつけます。

. xtile income_cat = income, nquantiles(4)
. label define quartiles 1 "Quartile 1" 2 "Quartile 2" 3 "Quartile 3" 4 "Quartile 4"
. label values income_cat quartiles

income_catに因子変数を示すi.演算子をつけてモデルをフィットします。

. cmclogit choice time, casevars(i.income_cat partysize)

次のコマンドを実行して、所得の四分位数ごとに交通手段として電車を選択する予想確率を推定します。

. margins income_cat, outcome(train)
電車を選択する予想確率を推定

結果をグラフ化します。

. marginsplot
電車を選択する予想確率の推定結果

ar.演算子を使用して、隣接する所得の四分位数間で予想される確率の違いをテストします。

. margins ar.income_cat, outcome(train) contrast(nowald effects)
隣接する所得の四分位数間で予想される確率の違い

交通手段として電車を選択する予想確率は、第1所得四分位から第2所得四分位に移動するときに大幅に変化することがわかります。

選択肢固有の共変量の影響 ― 空港での待ち時間が60分増加した場合の影響は?

これまで、交通手段の選択における所得の影響を検討してきましたが、選択肢固有の変数である移動時間についても検討することができます。
空港での待ち時間が全てのフライトで60分増加すると、交通手段の選択はどのように変化するかを調べます。

次のコマンドを実行します。
marginsのat()オプションを使用します。

. margins, at(time=generate(time+60)) alternative(air)
空港での待ち時間が60分増加した場合の交通手段の選択

元の飛行機の選択予想確率は28%でした。
今回は24%で、移動時間が長くなると飛行機を選択する確率が低くなっています。

次のコマンドを実行すると、元の移動時間と、飛行機での移動時間が60分増加した場合の両方を一度に推定できます。

. margins, at(time=generate(time)) at(time=generate(time+60))
. alternative(air)
元の移動時間と、飛行機での移動時間が60分増加した場合の移動時間の推定結果

#1がついているものが元の移動時間、#2がついているものが飛行機での移動時間が60分増加した場合です。
結果をグラフ化します。
X軸に各選択肢を配置するxdimension()オプションを使用します。

. marginsplot, xdimension(_outcome)

元の移動時間と、飛行機での移動時間が60分増加した場合の移動時間の推定のグラフ

飛行機の選択確率が減少したのに対し、他の交通手段の選択確率はやや増加しています。
これらの差が統計的に有意であるかを調べます。
marginscontrast(atcontrast(r))オプションを使用して、元の移動時間との比較を行います。

. margins, at(time=generate(time)) at(time=generate(time+60)) alternative(air) contrast(atcontrast(r) nowald effects)
contrast(atcontrast(r))オプション使用結果

結果から、これらの差は全て統計的に有意です。
飛行機の選択予想確率は3.8%ポイント減少しています。
さらに発展させて、「飛行機の移動時間が60分増加すると同時に、電車の移動時間が60分減少した場合、各交通手段の選択の確率にどのように影響するか」を調べます。

変数timeを複製して新規変数newtimeを作成します。
飛行機(mode==1)の移動時間を60分増加、電車(mode==2)の移動時間を60分減少させます。

. generate newtime = time
. replace newtime = time+60 if mode==1
. replace newtime = time-60 if mode==2

newtimeを使用してmarginsを実行します。
飛行機と電車の移動時間の変化が同時に発生することを指定するために、alternative(simultaneous)オプションを使用します。

. margins, at(time=generate(time)) at(time=generate(newtime)) alternative(simultaneous)
alternative(simultaneous)オプション使用結果

結果をグラフ化します。

. marginsplot, xdimension(_outcome)
alternative(simultaneous)オプション使用結果のグラフ

結果から、飛行機の選択予想確率は減少し、電車の選択予想確率は増加しました。
他の交通手段の選択予想確率にはあまり変化がありません。
これらの差が統計的に有意であるかを調べます。

. wmargins, at(time=generate(time)) at(time=generate(newtime))
. alternative(simultaneous) contrast(atcontrast(r) nowald effects)
飛行機および電車の移動時間の差が統計的に有利か調べる

結果から、飛行機および電車の差は統計的に有意です。
飛行機の選択予想確率は元の移動時間より5.2%ポイント減少しています。
電車の選択予想確率は元の移動時間より5.7%ポイント増加しています。

テクニカルサポート

ご不明な点がございましたら、お気軽にお問合せフォームよりテクニカルサポートまでご連絡ください。

その際、必ず「製品名」「バージョン」「シリアル番号」をご連絡ください。

Stata is a registered trademark of StataCorp LLC, College Station, TX, USA, and the Stata logo is used with the permission of StataCorp.

page_top_icon