Voici ce que je veux faire, mais il ne semble pas y avoir de predict
méthode pour le mlogit. Des idées?
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
la source
la source
Réponses:
Voici une astuce utile: ajoutez les données que vous souhaitez prédire à votre échantillon d'estimation d'origine, mais utilisez la variable de pondération pour définir le poids de ces nouvelles observations à zéro. Estimer le modèle (avec les nouvelles observations pondérées à zéro) et obtenir les prédictions à partir de la sortie "probabilités". De cette façon, vous pouvez contourner la fonction de prédiction, qui est un gâchis.
la source
Le package mlogit a une méthode Predict (), au moins dans la version que j'utilise (0.2-3 avec R 2.15.3).
Le code mis en place par @Zach contient une erreur. Les données de "format long" utilisées par mlogit () ont une ligne pour chaque alternative; c'est le format créé par la fonction mlogit.data (). Par conséquent, pour obtenir une prédiction pour le premier cas, vous devez retirer toutes les lignes de ce cas, et il y en a 4:
ce qui donne un bon résultat.
la source
Après pas mal d'efforts pour essayer d'utiliser la fonction de prédiction pour la population, je pense que je peux ajouter quelques idées à toutes vos réponses.
La
predict
fonction de mlogit fonctionne bien, il vous suffit de faire quelques ajustements et de vous assurer que les choses suivantes sont prises en charge:Le
newdata
(comme prévu) devrait inclure exactement les mêmes données que l'échantillon utilisé pour l'estimation du modèle. Cela signifie que l'on doit vérifier les propriétés "cachées" des données (comme cellesfactor
qui héritent de niveaux qui n'existent pas -droplevel
peuvent être utiles dans ce cas -, ou non introduites dans les facteurs d'échantillonnage, ou incorrectes,colname
etc.).Vous devez faire un choix arbitraire dans vos nouvelles données (si elles n'existent pas) quelque chose qui peut être facilement fait en utilisant la
sample
fonction:L'étape suivante requise consiste à transformer à nouveau les données en données mlogit, en utilisant la même fonction que celle utilisée pour les exemples de données, par exemple:
La dernière étape serait la prédiction réelle à l'aide de la
predict
fonction.la source
Pour répondre à ma propre question, je suis passé à l'utilisation du package 'glmnet' pour adapter mes logits multinomiaux, ce qui a l'avantage supplémentaire d'utiliser le lasso ou le filet élastique pour régulariser mes variables indépendantes. glmnet semble être un pack beaucoup plus «fini» que mlogit, avec une fonction «prédire».
la source
mlogit
a une fonction de prédiction, mais je l'ai trouvé très difficile à utiliser. J'ai écrit mon propre ensemble de fonctions très laid pour une implémentation que j'ai. Tout le monde est invité à les utiliser ou à les améliorer, stockés sur mon profil github .la source
Je suis presque sûr que cela se fait facilement avec le paquet mlogit donné en utilisant la fonction ajustée puis la fonction de prédiction R standard. Comme l'a souligné chl, bien que je ne l'ai pas encore fait moi-même (du moins pas le prédire), est illustré dans les vignettes de package ici à la page 29.
la source