12 votos

Predecir después de ejecutar el mlogit función en R

Aquí es lo que quiero hacer, pero no parece haber predict método para la mlogit. Alguna idea?

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)

8voto

El mlogit paquete tiene una predecir() método, al menos en la versión que estoy usando ( 0.2-3 con R 2.15.3).

El código aportado por @Zach tiene un error. El "largo" formato de datos utilizado por mlogit() tiene una fila para cada alternativa; este es el formato creado por el mlogit.función data (). Por lo tanto, para obtener una predicción para el primer caso es necesario sacar todas las filas para el caso concreto, y no son 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)

lo que da un buen resultado.

5voto

Manos C Puntos 1

Después de un gran esfuerzo tratando de usar la función de predicción para la población, creo que puedo añadir un par de ideas para todos tus respuestas.

El predict función de mlogit funciona bien, sólo tienes que hacer algunos ajustes y asegúrese de que las siguientes cosas:

  1. El newdata (como se esperaba) debe incluir exactamente los mismos datos de la muestra utilizada para la estimación del modelo. Esto significa que uno debe buscar "oculto" de las propiedades de los datos (tales como factor que hereda niveles que no existen -droplevel puede ser útil en este caso-, o no se presentó en la muestra de factores, o una mal colname etc.).

  2. Usted tiene que hacer una elección arbitraria en su nuevosdatos (si no existe) algo que se puede hacer fácilmente mediante la sample función de:

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
    
  3. El siguiente paso es transformar nuevamente los datos a mlogit de datos, utilizando la misma función que se utiliza para los datos de la muestra, por ejemplo:

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
    
  4. El paso final sería la real predicción usando la predict función.

    resulted<-predict(ml1,newdata=ExpData3)
    

2voto

Boris Tsirelson Puntos 191

Para responder a mi propia pregunta, me he mudado a través de 'glmnet' paquete que se adapte a mi multinomial logits, que tiene la ventaja añadida de utilizar el lazo o una red elástica para regularizar mi las variables independientes. glmnet parece ser mucho más 'terminado' empaquetado de mlogit, con un 'predecir' función.

1voto

ykaganovich Puntos 8497

mlogit tiene una función de predicción, pero me pareció muy difícil de usar. Yo escribí mi propio muy feo conjunto de funciones de una aplicación que tengo. Cualquiera es bienvenido a usar o mejora de las mismas, guardado en mi github perfil.

0voto

M3000 Puntos 1

Estoy bastante seguro de que esto se hace fácilmente con la mlogit paquete con el que van equipados con la función y, a continuación, el estándar R predecir la función. Como chl señaló, aunque yo no lo he hecho yo mismo, pero (al menos no el de predecir), es exampled en el paquete de viñetas aquí en la página 29.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X