Aqui está o que eu quero fazer, mas parece não haver predict
método para o mlogit. Alguma ideia?
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
fonte
fonte
Respostas:
Aqui está um truque útil: adicione os dados que você deseja prever à sua amostra de estimativa original, mas use a variável de pesos para definir o peso dessas novas observações como zero. Estime o modelo (com as novas observações ponderadas para zero) e obtenha as previsões da saída "probabilidades". Dessa forma, você pode ignorar a função de previsão, que é uma bagunça.
fonte
O pacote mlogit tem um método predict (), pelo menos na versão que estou usando (0.2-3 com R 2.15.3).
O código criado por @Zach tem um erro. Os dados de "formato longo" usados pelo mlogit () têm uma linha para cada alternativa; esse é o formato criado pela função mlogit.data (). Portanto, para obter uma previsão para o primeiro caso, você precisa extrair todas as linhas desse caso e existem 4:
o que dá um bom resultado.
fonte
Depois de muito esforço na tentativa de usar a função de previsão para a população, acho que posso acrescentar algumas idéias a todas as suas respostas.
A
predict
função do mlogit funciona bem, basta fazer alguns ajustes e garantir que as seguintes ações sejam resolvidas:O
newdata
(como esperado) deve incluir exatamente os mesmos dados que a amostra usada para a estimativa do modelo. Isso significa que é preciso verificar se há propriedades "ocultas" dos dados (como umafactor
que herda níveis que não existem -droplevel
podem ser úteis nesse caso - ou não foram introduzidas nos fatores da amostra, ou estão incorretascolname
etc.).Você deve fazer uma escolha arbitrária em seus novos dados (se não existirem) algo que possa ser feito facilmente usando a
sample
função:A próxima etapa necessária é transformar novamente os dados em mlogit, usando a mesma função usada para os dados de amostra, por exemplo:
O passo final seria a previsão real usando a
predict
funçãofonte
Para responder minha própria pergunta, passei a usar o pacote 'glmnet' para ajustar meus logits multinomiais, que tem a vantagem de usar o laço ou a rede elástica para regularizar minhas variáveis independentes. O glmnet parece ser um pacote muito mais "finalizado" que o mlogit, completo com a função "prever".
fonte
mlogit
tem uma função de previsão, mas achei muito difícil de usar. Eu escrevi meu próprio conjunto muito feio de funções para uma implementação que tenho. Qualquer pessoa pode usá-los ou melhorá-los, armazenados no meu perfil do github .fonte
Tenho certeza de que isso é feito facilmente com o pacote mlogit fornecido, usando a função ajustada e, em seguida, a função de previsão R padrão. Como chl apontou, embora eu ainda não tenha feito isso (pelo menos não o previsto), é examinado nas vinhetas de pacotes aqui na página 29.
fonte