基礎ゼミ5
PythonBiogemeによる
多項ロジットモデルの推定

福田研究室
金子法子
16/5/2017

PythonBiogemeとはBiogeme：
最尤推定を用いた離散選択モデルパラメータ推定ツール
BisonBiogeme
 標準的な離散選択モデル(MNL,NL,CNL,Probit…)
 形式に即した単純な言語

Biogeme

PythonBiogeme 多目的パラメータモデル
 モデルと尤度関数の使用はPython
Programming 言語に基づく

1

使用するデータについて
Swissmetro.dat
GROUP

グループ

SURVEY（0）電車，（1）車で行われた調査

SP

SP調査（1）に固定

ID

回答者ID

PURPOSE目的(1)通勤(2)買物(3)仕事(4)私事(5)仕事から帰宅(6)買物から帰宅(7)出先から帰宅(8)私事から帰宅(9)その他

FIRST

First class traveler(0)no(1)yes

TICKET

搭乗券(0)None(1)往復半額券(2)片道半額券(3)往復普通券(4)片道往復券(5)半日券(6)定期券(7)学生・高齢者定期券(8)7時以降券(9)団体券(10)その他

WHO払った人(0)不明(1)自分(2)雇用者(3)半分

LUGGAGE AGE(0)なし(1)1(2)複数MALE(0)女性(1)男性

INCOME

年収(1000CHF)(0)(1)50以下(2)50～100(3)100以上(4)不明

GA(1)GAあり(0)その他

ORIGIN移動の始点

2使用するデータについて
Swissmetro.dat
DEST

目的地

TRAIN_AV

列車利用可能ダミー

CAR_AV

車利用可能ダミー

SM_AV

SM利用可能ダミー

TRAIN_TT

電車移動時間TRAIN_CO

電車費用

TRAIN_HE

列車間隔

SM_TT

SM移動時間

SM_CO

SM費用

SM_HE

SM間隔

SM_SEATS(1)Airline seat (0)その他

CAR_TT

車移動時間

CAR_CO

車費用

CHOICE(0)不明(1)列車(2)SM(3)車3推定するモデルについて
多項ロジットモデル（MNL)
選択肢３つの中から，誤差が第一種極値分布に従う効用最大化を行うと考える

4

SwissMetroTrain

Car推定するモデルについて
多項ロジットモデル(MNL)
選択肢３つの中から，誤差が第一種極値分布に従う効用最大化を行うと考える
𝑉1 = 𝑉𝑡𝑟𝑎𝑖𝑛 = 𝐴𝑆𝐶𝑡𝑟𝑎𝑖𝑛 + 𝐵𝑡𝑖𝑚𝑒 ∗ 𝑇𝑟𝑎𝑖𝑛 𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 + 𝐵𝑐𝑜𝑠𝑡 ∗ 𝑇𝑟𝑎𝑖𝑛𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑
𝑉2 = 𝑉𝑆𝑀 = 𝐴𝑆𝐶𝑆𝑀 + 𝐵𝑡𝑖𝑚𝑒 ∗ 𝑆𝑀𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 + 𝐵𝑐𝑜𝑠𝑡 ∗ 𝑆𝑀𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑
𝑉3 = 𝑉𝑐𝑎𝑟 = 𝐴𝑆𝐶𝑐𝑎𝑟 + 𝐵𝑡𝑖𝑚𝑒 ∗ 𝑐𝑎𝑟𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 + 𝐵𝑐𝑜𝑠𝑡 ∗ 𝑐𝑎𝑟𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑5推定するモデルについて
多項ロジットモデル(MNL)
選択肢３つの中から，誤差が第一種極値分布に従う効用最大化を行うと考える
𝑉1 = 𝑉𝑡𝑟𝑎𝑖𝑛 = 𝐴𝑆𝐶𝑡𝑟𝑎𝑖𝑛 + 𝐵𝑡𝑖𝑚𝑒 ∗ 𝑇𝑟𝑎𝑖𝑛 𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 + 𝐵𝑐𝑜𝑠𝑡 ∗ 𝑇𝑟𝑎𝑖𝑛𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑
𝑉2 = 𝑉𝑆𝑀 = 𝐴𝑆𝐶𝑆𝑀 + 𝐵𝑡𝑖𝑚𝑒 ∗ 𝑆𝑀𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 + 𝐵𝑐𝑜𝑠𝑡 ∗ 𝑆𝑀𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑
𝑉3 = 𝑉𝑐𝑎𝑟 = 𝐴𝑆𝐶𝑐𝑎𝑟 + 𝐵𝑡𝑖𝑚𝑒 ∗ 𝑐𝑎𝑟𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 + 𝐵𝑐𝑜𝑠𝑡 ∗ 𝑐𝑎𝑟𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑𝐴𝑆𝐶∗∗ ・ 𝐵∗∗ は推定されるパラメータ∗∗ 𝑇𝑇 𝑠𝑐𝑎𝑙𝑒𝑑 ・ ∗∗𝑐𝑜𝑠𝑡 𝑠𝑐𝑎𝑙𝑒𝑑 は変数6推定するモデルについて
選択確率式

𝑦𝑖 𝑒 𝑉𝑖 (𝑥,𝛽)𝑃 𝑖| 1,2,3 ; 𝑥, 𝛽 =𝑦1 𝑒 𝑉1 + 𝑦2 𝑒 𝑉2 + 𝑦3 𝑒 𝑉3
𝑦𝑖 : 選択可能な時＝1，不可能な時＝0対数尤度

𝐿𝐿 =log 𝑃 𝑖𝑛 | 1,2,3 ; 𝛽𝑛𝑖𝑛 :個人nによって選択された選択肢
7推定するコードについて
02logit.py
拡張子.py

メモ帳などで開いてみると…

8

Pythonbiogemeの使い方
 BIOGEME/gtkguibiogeme_static.exe

9Pythonbiogemeの使い方
 BIOGEME/gtkguibiogeme_static.exe• Model specification
02logit.py• Datafile
swissmetro.dat

APPLY!!

10推定するコードについて
02logit.py ～コメント文～#の後はコメント文として認識されて，コードには影響を及ぼさない➞python と統一された決まり11

推定するコードについて
02logit.py ～ライブラリの読み込み～全部！！

必須のライブラリ• biogeme・・・pythonbiogemeに必要なpython言語の拡張• headers・・・dataの先頭行の読み込み追加のライブラリ• loglikelihood・・・最尤推定に必要なライブラリ• statistics・・・統計に使う式のライブラリ12推定するコードについて
02logit.py ～パラメータの設定～

固定ASC_CAR = Beta(‘ASC_CAR’ , 0 , -10 , 10 , 0 , ‘Car cte.’)パラメータ名

初期値 上限・下限

結果表示される
時のパラメータ名

固定(1)・非固定(0)13推定するコードについて
02logit.py ～変数の設定～

TRAIN_TT_SCALED= DefineVariable('TRAIN_TT_SCALED', TRAIN_TT / 100.0)
変数定義の関数

変数名

スケール調整14推定するコードについて
02logit.py ～availabilityの設定～

CAR_AV_SP = DefineVariable('CAR_AV_SP',CAR_AV * ( SP != 0 ))変数定義の関数

変数名

𝑆𝑃 ≠ 0：CAR_AV
𝑆𝑃 = 0：015

推定するコードについて
02logit.py ～選択モデルの設定～

ロジットモデル選択
bioLogLogit(効用関数，Availability,計算上の選択)確率の対数をとる

イテレータの設定

推定変数の設定

16推定するコードについて
02logit.py ～選択モデルの設定～

目的が1,3(仕事目的)以外，選択が0(不明)をexcludeとして除外

17推定するコードについて
02logit.py ～統計量を求める～①②③④① BIOGEME_OBJECT.PARAMETERS[“optimizationAlgorithm”]=“BIO”
パラメータ推定の設定を定義する関数

今回は最適化アルゴリズムをBIOに設定② ～④ BIOGEME_OBJECT.FORMULAS[“Car utility”]=“V3”モデルの部分の選択 自動車の効用をV3と定義

18

推定するコードについて
02logit.py ～統計量を求める～①②③① nullLoglikelifood(利用可能な選択肢ID，データのイテレータ)➞ヌルログを計算する
𝐿=−ln(𝐽𝑛 )𝑛② cteLoglokelifood(選択肢，実際の選択，データのイテレータ)➞パラメータが1つ固定の場合の対数尤度
𝐿=𝑛𝑖 ln 𝑛𝑖 − 𝑛𝑙𝑛(𝑛)𝑖③availabilityStatistics(availability,データのイテレータ)➞選択肢が利用可能である回数の統計値

19

結果の読み方出力ファイルについて① 02logit.html
HRML形式での推定結果② 02logit_param.py
直接再使用できる推定値，分散・共分散のマトリクス③ 02logit.log
実行中にpython biogemeから得られるログ④ 02logit.tex
主な結果をtexで表記したもの⑤ Hess.lis
最終値BHHH(Berndt Hall Hall and Hausman),2次導関数，ヘシアンマトリクス⑥ Hessian.lis
各反復段階での対数尤度関数の逆行列(Matlab互換)⑦ _parametersUsed.py
pythonbiogemeの実行で使用されたパラメータと使用されている値のリスト
20

結果の読み方出力ファイルについて選択可能だった回数
選択した回数

パラメタ1つ固定の対数尤度

ヌルログ

21

結果の読み方出力ファイルについて

初期尤度𝐿𝑖
最終尤度𝐿𝑖
尤度比検定 − 2(𝐿𝑖 − 𝐿∗ )
𝜌2 = 1 − 𝐿∗ /𝐿𝑖
𝜌2 = 1 − 𝐿∗ /𝐿𝑖22

結果の読み方出力ファイルについて

p値
標準偏差 t値
𝜎𝑘𝑡𝑘= 𝛽𝑘 /𝜎𝑘

ロバスト推定による
統計値
ロバスト推定：誤差があるデータに対してその誤差の影響を最小にすることを23目的とした理論

結果の読み方出力ファイルについて

共分散

相関

t値 p値
ロバスト推定による統計値24推定するモデルについて
NestedLogitモデル（MNL)
選択肢３つの中に以下のような相関があると仮定して推定を行う
FutureSwissMetro

Existing
𝜇TrainCar
25

NLの推定出力ファイルについて

Nested Logit 用のライブラリのインポート

Nested Logit ・相関を表すパラメーター

26

NLの推定出力ファイルについて

Nested の設定

27

NLの推定Nested の設定

28

NLの推定Nested の設定

相関が認められること
29が分かる（補足）その他のモデル
CNL

SwissMetro

Existing

Public

Train

Car30

（補足）その他のモデル
ProbitSwissMetro

Train

Car31