3

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 ドキュメントの例のように見せるには、次のようにデータを構造化する必要があると考えています。

  1. 各レコード (選択された代替案をリストする) は複製され、特定の旅行の選択されていない代替案も含まれます。
  2. 選択されていない代替案については、代替案固有の値がゼロに設定されます

これにより、次のようなデータ構造が得られます。

"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() に最初のデータセットから選択肢のセットを構築させる方法はありますか?

4

1 に答える 1

0

あなたが準備した方法を考えると、walk_mode_timeおそらく式としてbike_mode_time試してみるべきwalk_mode_time + bike_mode_time | 1 + carsdivworkers | 0です. 私は通常、部分的にゼロの変数を作成し、式の最初の部分のみを使用するのが便利だと思います。つまり、代替の量よりも少ない 1 に対して与えられます (指定されていない 1 の係数はゼロであり、その他はそれに対して相対的です) walk_mode_time + bike_mode_time + walk_mode_carsdivworkers + bike_mode_carsdivworkers + ... | 1 | 0*_carsdivworkers

また、データに何か問題がある可能性もあります。たとえば、ゼロまたは複数の選択肢が選択された選択状況、すべての選択肢に対して同じ値を持つ変数などです。式0 | 1 | 0が失敗した場合は、おそらくデータに問題があります。式の問題があります。

于 2012-09-26T12:23:49.897 に答える