これがstats.stackexchange.comから移行されたのは残念です。なぜなら、おそらくそこでより良い答えが得られたからです。
このmlogit
パッケージは、個人に関するデータを想定しており、「ワイド」または「ロング」データのいずれかを受け入れることができます。前者では、選択されたモードを示す個人ごとに 1 つの行があり、モード固有の変数 (例では時間と価格) の組み合わせごとに個別の列があります。長い形式では、すべての個体に対して n 行があり、n はモードの数であり、2 番目の列には各個体に対して選択されたモードが含まれているTRUE
かFALSE
示され、モード固有の変数ごとに 1 つの追加の列があります。内部的にmlogit
は、長いフォーマットのデータセットを使用しますが、ワイド フォーマットを提供して、mlogit
それを変換することができます。この場合、変数が 2 つしかないため、これがより適切なオプションである可能性があります。
個人が期待されており、個人の数があるためmlogit
、これに対処する 1 つの方法は、データを拡張して各モードに適切な行数を持ち、結果の data.frame に変数の組み合わせを入力することです。以下のコードはそれを行います:
df.agg <- data.frame(month=1:4,car=c(3465,3674,3543,4334),bus=c(1543,2561,2432,1266),bicycle=c(453,234,123,524))
df.lvl <- data.frame(mode=c("car","bus","bicycle"), price=c(120,60,0), time=c(5,10,30))
get.mnth <- function(mnth) data.frame(mode=rep(names(df.agg[2:4]),df.agg[mnth,2:4]),month=mnth)
df <- do.call(rbind,lapply(df.agg$month,get.mnth))
cols <- unlist(lapply(df.lvl$mode,function(x)paste(names(df.lvl)[2:3],x,sep=".")))
cols <- with(df.lvl,setNames(as.vector(apply(df.lvl[2:3],1,c)),cols))
df <- data.frame(df, as.list(cols))
head(df)
# mode month price.car time.car price.bus time.bus price.bicycle time.bicycle
# 1 car 1 120 5 60 10 0 30
# 2 car 1 120 5 60 10 0 30
# 3 car 1 120 5 60 10 0 30
# 4 car 1 120 5 60 10 0 30
# 5 car 1 120 5 60 10 0 30
# 6 car 1 120 5 60 10 0 30
今、私たちは使用することができますmlogit(...)
library(mlogit)
fit <- mlogit(mode ~ price+time|0 , df, shape = "wide", varying = 3:8)
summary(fit)
#...
# Frequencies of alternatives:
# bicycle bus car
# 0.055234 0.323037 0.621729
#
# Coefficients :
# Estimate Std. Error t-value Pr(>|t|)
# price 0.0047375 0.0003936 12.036 < 2.2e-16 ***
# time -0.0740975 0.0024303 -30.489 < 2.2e-16 ***
# ...
coef(fit)["time"]/coef(fit)["price"]
# time
# -15.64069
これは、移動時間を 1 (分?) 短縮することは、約 15 (ドル) の価値があることを示唆していますか?
この分析では、month
変数は無視されます。月はモード固有でも個人固有でもないため、それをどのように組み込むかは私にはわかりません。その月が個人固有であると「ふりをして」、 :mode ~ price+time|month
のようなモデル式を使用することもできますが、データセットを使用すると、システムは計算上特異になります。
mode ~ 1|month
他の回答の結果を再現するには、 withを使用できますreflevel="car"
。これは、モード固有の変数を無視し、月の効果を推定するだけです (モード = 車に相対的)。
mlogit
ここに素敵なチュートリアルがあります。