Quando * não * devo usar a função nlm de R para o MLE?

25

Encontrei alguns guias sugerindo que eu use o nlm de R para estimar a probabilidade máxima. Mas nenhum deles (incluindo a documentação de R ) fornece muita orientação teórica para quando usar ou não a função.

Até onde eu sei, o nlm está apenas descendo gradualmente ao longo das linhas do método de Newton. Existem princípios para quando é razoável usar essa abordagem? Que alternativas estão disponíveis? Além disso, existem limites para o tamanho das matrizes etc., pode-se passar para o nlm?

Abe
fonte

Respostas:

39

Há uma série de programas de optimização de uso geral na base de R que eu estou ciente de: optim, nlminb, nlme constrOptim(que lida com restrições de desigualdade lineares, e as chamadas optimsob o capô). Aqui estão algumas coisas que você pode querer considerar ao escolher qual delas usar.

  • optimpode usar vários algoritmos diferentes, incluindo gradiente conjugado, Newton, quase-Newton, Nelder-Mead e recozimento simulado. Os dois últimos não precisam de informações de gradiente e, portanto, podem ser úteis se os gradientes não estiverem disponíveis ou não forem possíveis de serem calculados (mas provavelmente serão mais lentos e exigirão mais ajustes finos nos parâmetros, respectivamente). Ele também tem uma opção para retornar o Hessian computado na solução, o que você precisaria se desejar erros padrão junto com a própria solução.

  • nlminbusa um algoritmo quase-Newton que preenche o mesmo nicho que o "L-BFGS-B"método optim. Na minha experiência, parece um pouco mais robusto do optimque é mais provável que retorne uma solução em casos marginais em optimque não convergirá, embora isso provavelmente dependa de problemas. Ele possui o bom recurso, se você fornecer uma função gradiente explícita, de fazer uma verificação numérica de seus valores na solução. Se esses valores não corresponderem aos obtidos pela diferenciação numérica, nlminbserá emitido um aviso; isso ajuda a garantir que você não cometeu um erro ao especificar o gradiente (fácil de fazer com probabilidades complicadas).

  • nlmusa apenas um algoritmo de Newton. Isso pode ser mais rápido que outros algoritmos, no sentido de precisar de menos iterações para alcançar a convergência, mas tem suas próprias desvantagens. É mais sensível à forma da probabilidade, portanto, se for fortemente não quadrática, poderá ser mais lenta ou você poderá obter convergência para uma solução falsa. O algoritmo de Newton também usa o Hessian, e computação que pode ser lenta o suficiente na prática, mais do que anula qualquer aceleração teórica.

Hong Ooi
fonte
17

Quando usar e não usar qualquer método específico de maximização depende em grande parte do tipo de dados que você possui. nlmfuncionará bem se a superfície de probabilidade não for particularmente "áspera" e for diferenciada em toda parte. nlminbfornece uma maneira de restringir valores de parâmetros para caixas delimitadoras específicas. optim, que provavelmente é o otimizador mais usado, fornece algumas rotinas de otimização diferentes; por exemplo, BFGS, L-BFGS-B e recozimento simulado (via opção SANN), o último dos quais pode ser útil se você tiver um problema de otimização difícil. Há também vários otimizadores disponíveis no CRAN. rgenoud, por exemplo, fornece um algoritmo genético para otimização.DEoptimusa uma rotina diferente de otimização genética. Os algoritmos genéticos podem demorar a convergir, mas geralmente garantem a convergência (com o tempo), mesmo quando há descontinuidades na probabilidade. Eu não sei DEoptim, mas rgenoudestá configurado para uso snowem processamento paralelo, o que ajuda um pouco.

Portanto, uma resposta provavelmente um tanto insatisfatória é que você deve usar nlm ou qualquer outro otimizador se funcionar para os dados que você possui. Se você tem uma probabilidade bem-comportada, qualquer uma das rotinas fornecidas por optimou nlmfornecerá o mesmo resultado. Alguns podem ser mais rápidos que outros, o que pode ou não importar, dependendo do tamanho do conjunto de dados, etc. Quanto ao número de parâmetros que essas rotinas podem manipular, eu não sei, embora sejam provavelmente alguns. Obviamente, quanto mais parâmetros você tiver, maior a probabilidade de encontrar problemas com a convergência.

Jason Morgan
fonte