Rでmlogit関数を実行した後に予測する


11

これが私がやりたいことですがpredict、mlogitの方法がないようです。何か案は?

library(mlogit)
data("Fishing", package = "mlogit")
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")

Fish_fit<-Fish[-1,]
Fish_test<-Fish[1,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

4
付属のビネット、Rの多項ロジットモデルの推定:mlogitパッケージを読みましたか?新しいデータに当てはめた係数を適用しなければならないように思えますね。
2011年

@chlそれは私がする必要があることです、はい、しかし私は車輪を再発明する必要がないことを望んでいました。
ザック

回答:


2

便利なトリックを次に示します。予測するデータを元の推定サンプルに追加しますが、重み変数を使用して、それらの新しい観測値の重みをゼロに設定します。モデルを推定し(新しい観測値をゼロに重み付けして)、「確率」出力から予測を取得します。そうすれば、混乱する予測機能をバイパスできます。


6

mlogitパッケージには、少なくとも私が使用しているバージョン(0.2-3とR 2.15.3)では、predict()メソッドがあります。

@Zachによって作成されたコードには、1つのエラーがあります。mlogit()が使用する「長い形式」のデータには、選択肢ごとに1つの行があります。これは、mlogit.data()関数によって作成されるフォーマットです。したがって、最初のケースの予測を取得するには、そのケースのすべての行を引き出す必要があり、4つあります。

Fish_fit<-Fish[-(1:4),]
Fish_test<-Fish[1:4,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

これは良い結果をもたらします。


4

母集団に対して予測関数を使用しようとするかなりの努力の後で、私はあなたのすべての答えにいくつかの洞察を追加できると思います。

predictmlogit の機能は正常に機能します。いくつかの調整を行い、次の点に注意してください。

  1. newdata(予想通り)モデルの推定に使用したサンプルとまったく同じデータを含むべきです。これは、データの「隠された」プロパティをチェックする必要があることを意味します(factor存在しないレベルを継承する- droplevelこの場合に役立つ可能性がある- またはサンプル因子に導入されていない、または間違っているcolnameなど)。

  2. 新しいデータ(存在しない場合)で任意の選択を行う必要があります。これは、sample関数を使用して簡単に実行できます。

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
  3. 次に必要な手順は、サンプルデータに使用したのと同じ関数を使用して、データを再度mlogitデータに変換することです。次に例を示します。

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
  4. 最後のステップは、predict関数を使用した実際の予測です。

    resulted<-predict(ml1,newdata=ExpData3)

2

私自身の質問に答えるために、私は多項式ロジットに適合するために 'glmnet'パッケージを使用することに移りました。これには、ラッソーまたはエラスティックネットを使用して独立変数を正則化するという追加の利点があります。glmnetは、mlogitよりもはるかに「完成した」パッケージであり、「予測」機能を備えているようです。


1

mlogit予測機能を持っていますが、使用するのは非常に難しいことがわかりました。私は自分が持っている実装のため、独自の非常に醜い関数のセットを書きました。私のgithubプロファイルに保存されている、誰でもそれらを使用または改善することができます。


0

これは、与えられたmlogitパッケージを使用して、近似関数と標準のR予測関数を使用することで簡単に実行できると確信しています。CHLが指摘したように、私は(少なくとも、予測できない)、まだ自分自身をそれを行っていないものの、パッケージのビネットにexampledされ、ここで PG 29に。


1
ビネットは一見シンプルです。実際には、新しいデータに適用する方法がわかりませんでした。だから私は以下にリンクされた自分のコードを書いた。
gregmacfarlane 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.