Estoy tratando de usar R para estimar un modelo logit multinomial con una especificación manual. He encontrado algunos paquetes que le permiten estimar los modelos MNL here o here.Ir más allá de la función de optimización de R
He encontrado algunas otras escrituras en "rodar" tu propia función MLE here. Sin embargo, desde mi búsqueda, todas estas funciones y paquetes se basan en la función interna optim
.
En mis pruebas de referencia, optim
es el cuello de botella. Usando un conjunto de datos simulado con ~ 16000 observaciones y 7 parámetros, R toma alrededor de 90 segundos en mi máquina. El modelo equivalente en Biogeme demora ~ 10 segundos. Un colega que escribe su propio código en Ox informa alrededor de 4 segundos para este mismo modelo.
¿Alguien tiene experiencia en escribir su propia función MLE o puede dirigirme hacia algo que está optimizado más allá de la función predeterminada optim
(sin juego de palabras)?
Si alguien quiere que el código R vuelva a crear el modelo, avíseme: se lo facilitaré glady. No lo he proporcionado, ya que no es directamente relevante para el problema de optimizar la función optim
y para preservar el espacio ...
EDITAR: Gracias a todos por su opinión. Basándonos en una miríada de comentarios a continuación, pudimos obtener R en el mismo estadio que Biogeme para modelos más complicados, y R fue en realidad más rápido para varios modelos más pequeños/simples que ejecutamos. Creo que la solución a largo plazo a este problema implicará escribir una función de maximización separada que dependa de una biblioteca fortran o C, pero ciertamente estoy abierto a otros enfoques.
Devil está en los detalles. Podría meterse con los parámetros 'optim' (ver la sección sobre' control' en la documentación). Puede comparar los parámetros predeterminados con esto utilizado por su código de colega o por Biogeme. ¿Son diferentes? Si es así, ¿por qué? – Marek
@Marek - Biogeme se basa en una rutina de maximización personalizada escrita en C y es una historia similar con Ox.Esta es un área nueva para mí, pero estoy empezando a aprender sobre los diferentes enfoques utilizados. – Chase
por lo que he entendido, nlm() y posiblemente las otras rutinas de optimización en R ya están escritas en C. Prefiero aconsejarle que busque el acceso a las funciones internas directamente para deshacerse de la sobrecarga en lugar de reinventar la rueda –