mlogit パッケージを使用して、移動手段の選択モデルを推定しようとしています。最終的には、より多くの変数を使用してネストされたモデルをセットアップする予定ですが、最初に非常に単純なネストされていない多項式モデルをセットアップしてテストしようとしています。特に、達成しようとしていることは、mlogit パッケージの例とは異なり、いくつかの代替固有 (自転車、徒歩、ドライブなど) ユーティリティ関数があります。
開始データセット (簡略化) は次の形式を持っています。
"recid","mode","walk_mode_time","bike_mode_time","carsdivworkers"
254,"Bike",15.0666484832764,4.51999473571777,0.5
7,"SOV",17.9941387176514,5.39824199676514,2
40,"Walk",43,12.8999996185303,1
このテスト モデルに指定する効用関数は次のとおりです。
ユーティリティ(SOV)= beta1* carsdivworkers
Utility(Walk)= Constant(Walk)+ beta6*(walk_mode_time) + beta7 *( carsdivworkers)
Utility(Bike)= Constant(Bike)+ beta8*(bike_mode_time) + beta9 *( carsdivworkers))
データを mlogit ドキュメントの例のように見せるには、次のようにデータを構造化する必要があると考えています。
- 各レコード (選択された代替案をリストする) は複製され、特定の旅行の選択されていない代替案も含まれます。
- 選択されていない代替案については、代替案固有の値がゼロに設定されます
これにより、次のようなデータ構造が得られます。
"recid","mode","choice","walk_mode_time",”bike_mode_time","cardivwkr"
7,"Bike",FALSE,0,5.39824199676514,1
7,"DriveTransit",FALSE,0,0,1
7,"HOV2",FALSE,0,0,1
7,"HOV3",FALSE,0,0,1
7,"SOV",TRUE,0,0,1
7,"Walk",FALSE,17.9941387176514,0,1
7,"WalkTransit",FALSE,0,0,1
40,"Bike",FALSE,0,12.8999996185303,0.5
40,"DriveTransit",FALSE,0,0,0.5
40,"HOV2",FALSE,0,0,0.5
40,"HOV3",FALSE,0,0,0.5
40,"SOV",FALSE,0,0,0.5
40,"Walk",TRUE,43,0,0.5
40,"WalkTransit",FALSE,0,0,0.5
254,"Bike",TRUE,0,4.51999473571777,1
254,"DriveTransit",FALSE,0,0,1
254,"HOV2",FALSE,0,0,1
254,"HOV3",FALSE,0,0,1
254,"SOV",FALSE,0,0,1
254,"Walk",FALSE,15.0666484832764,0,1
254,"WalkTransit",FALSE,0,0,1
次に、これを次のように mlogit データ構造に変換します。
logit_data <- mlogit.data(data=joined_data,
choice="choice",
shape="long",
alt.var="mode",
chid.var="recid",
drop.index=TRUE,
reflevel= "SOV")
そして私たちのモデル仕様:
mc <-mlogit(formula= choice ~ 1 | carsdivworkers | walk_mode_time + bike_mode_time,
data = logit_data, reflevel= "SOV")
残念ながら、これを完全なデータセットに対して実行すると、次のエラーが発生します。
solve.default(H, g[!fixed]) のエラー: Lapack ルーチン dgesv: システムは厳密に特異です
この式は、必要な効用関数を指定していると思いますが、確かではありません。これは正しいです?また、これまで行ってきたように、データ レコードを手動で複製する必要がありますか? または、mlogit.data() に最初のデータセットから選択肢のセットを構築させる方法はありますか?