在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软件包中的伴随小插图“多项式logit模型的估计”?在我看来,您只需要在新数据上应用拟合系数,不是吗?
chl

@chl是我需要做的,是的,但是我希望我不必重新发明轮子。
Zach

Answers:


2

这是一个有用的技巧:将要预测的数据添加到原始估计样本中,但是使用weights变量将这些新观测值的权重设置为零。估计模型(将新观察值加权为零),然后从“概率”输出中获得预测。这样,您就可以绕开预测函数,这很麻烦。


6

至少在我使用的版本中,mlogit软件包确实具有predict()方法(R 2.15.3为0.2-3)。

@Zach编写的代码中有一个错误。mlogit()使用的“长格式”数据在每个替代项中都有一行;这是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. 您必须在newdata中进行任意选择(如果不存在),可以使用以下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'软件包来拟合我的多项式logit,它具有使用套索或弹性网对我的自变量进行正则化的附加优点。glmnet似乎比mlogit更加“完成”,并带有“ predict”功能。


1

mlogit具有预测功能,但是我发现它很难使用。我为自己拥有的实现编写了非常丑陋的函数集。欢迎任何人使用或改进它们,它们存储在我的github个人资料中。


0

我敢肯定,使用给定的mlogit包,可以先使用fit函数,再使用标准R预测函数,轻松完成此操作。由于叶绿素指出,虽然我还没有做到我自己还没有(至少不是预测),包中的小插曲是所示例这里在第29页。


1
小插图看似简单;在实践中,我不知道如何应用新数据。所以我写了我自己的代码,在下面链接。
gregmacfarlane 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.