Esto es lo que quiero hacer, pero parece que no hay ningún predict
método para el mlogit. ¿Algunas ideas?
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)
r
logistic
logit
multinomial
Zach
fuente
fuente
Respuestas:
Aquí hay un truco útil: agregue los datos que desea predecir a su muestra de estimación original, pero use la variable de pesos para establecer el peso de esas nuevas observaciones en cero. Estime el modelo (con las nuevas observaciones ponderadas a cero) y obtenga las predicciones de la salida de "probabilidades". De esa manera, puede omitir la función de predicción, que es un desastre.
fuente
El paquete mlogit tiene un método predict (), al menos en la versión que estoy usando (0.2-3 con R 2.15.3).
El código presentado por @Zach tiene un error. Los datos de "formato largo" utilizados por mlogit () tienen una fila para cada alternativa; Este es el formato creado por la función mlogit.data (). Por lo tanto, para obtener una predicción para el primer caso, debe extraer todas las filas para ese caso, y hay 4:
Lo que da un buen resultado.
fuente
Después de mucho esfuerzo al tratar de usar la función de predicción para la población, creo que puedo agregar algunas ideas a todas sus respuestas.
La
predict
función de mlogit funciona bien, solo tiene que hacer algunos ajustes y asegurarse de que se cuiden las siguientes cosas:El
newdata
(como se esperaba) debe incluir exactamente los mismos datos que la muestra utilizada para la estimación del modelo. Esto significa que uno debe verificar las propiedades "ocultas" de los datos (como unafactor
que hereda niveles que no existen,droplevel
puede ser útil en este caso, o no se introduce en los factores de la muestra, o un error,colname
etc.).Debe hacer una elección arbitraria en sus datos nuevos (si no existe), algo que se puede hacer fácilmente con la
sample
función:El siguiente paso requerido es volver a transformar los datos en datos mlogit, utilizando la misma función que se utiliza para los datos de muestra, por ejemplo:
El paso final sería la predicción real usando la
predict
función.fuente
Para responder a mi propia pregunta, pasé a usar el paquete 'glmnet' para ajustar mis logits multinomiales, que tiene la ventaja adicional de usar el lazo o la red elástica para regularizar mis variables independientes. glmnet parece ser un paquete mucho más 'terminado' que mlogit, completo con una función 'predecir'.
fuente
mlogit
tiene una función de predicción, pero me resultó muy difícil de usar. Escribí mi propio conjunto de funciones muy feo para una implementación que tengo. Cualquiera puede usarlos o mejorarlos, almacenados en mi perfil de github .fuente
Estoy bastante seguro de que esto se hace fácilmente con el paquete mlogit dado usando la función ajustada y luego la función de predicción estándar R. Como lo señalé chl, aunque todavía no lo he hecho yo mismo (al menos no lo he predicho), se muestra en las viñetas del paquete aquí en la página 29.
fuente