Quando dovrei * non * usare la funzione nlm di R per MLE?


25

Ho incontrato un paio di guide che suggeriscono di usare R's nlm per la massima stima della probabilità. Ma nessuno di essi (inclusa la documentazione di R ) fornisce molte indicazioni teoriche su quando utilizzare o meno la funzione.

Per quanto ne so, nlm sta solo facendo una discesa gradiente lungo le linee del metodo di Newton. Ci sono principi per quando è ragionevole usare questo approccio? Quali alternative sono disponibili? Inoltre, ci sono limiti alle dimensioni degli array, ecc. Si può passare a nlm?

Risposte:


39

Ci sono una serie di routine di ottimizzazione general-purpose a base di R che io sappia: optim, nlminb, nlme constrOptim(che gestisce vincoli di disuguaglianza lineari, e le chiamate optimsotto il cofano). Ecco alcune cose che potresti voler considerare nella scelta di quale usare.

  • optimpuò utilizzare un numero di algoritmi diversi tra cui gradiente coniugato, Newton, quasi-Newton, Nelder-Mead e ricottura simulata. Gli ultimi due non necessitano di informazioni sul gradiente e quindi possono essere utili se i gradienti non sono disponibili o non sono fattibili per il calcolo (ma è probabile che siano più lenti e richiedano una maggiore regolazione dei parametri, rispettivamente). Ha anche un'opzione per restituire l'Assia calcolata alla soluzione, di cui avresti bisogno se desideri errori standard insieme alla soluzione stessa.

  • nlminbutilizza un algoritmo quasi-Newton che riempie la stessa nicchia del "L-BFGS-B"metodo in optim. Nella mia esperienza sembra un po 'più robusto che optimin quello che è più probabile che restituisca una soluzione in casi marginali in cui optimnon riuscirà a convergere, anche se probabilmente dipende dal problema. Ha la bella caratteristica, se si fornisce una funzione di gradiente esplicita, di fare un controllo numerico dei suoi valori alla soluzione. Se questi valori non corrispondono a quelli ottenuti dalla differenziazione numerica, nlminbverrà emesso un avviso; questo aiuta a garantire di non aver commesso un errore nello specificare il gradiente (facile da fare con complicate probabilità).

  • nlmutilizza solo un algoritmo di Newton. Questo può essere più veloce di altri algoritmi nel senso di aver bisogno di meno iterazioni per raggiungere la convergenza, ma ha i suoi svantaggi. È più sensibile alla forma della probabilità, quindi se è fortemente non quadratico, potrebbe essere più lento o potresti ottenere la convergenza a una soluzione falsa. L'algoritmo di Newton utilizza anche l'Assia e il calcolo che in pratica può essere abbastanza lento da annullare più di qualsiasi accelerazione teorica.


17

Quando utilizzare e non utilizzare un particolare metodo di massimizzazione dipende in larga misura dal tipo di dati che hai. nlmfunzionerà perfettamente se la superficie della probabilità non è particolarmente "ruvida" ed è ovunque differenziabile. nlminbfornisce un modo per vincolare i valori dei parametri a determinati riquadri di delimitazione. optim, che è probabilmente l'ottimizzatore più utilizzato, fornisce alcune diverse routine di ottimizzazione; ad esempio, BFGS, L-BFGS-B e ricottura simulata (tramite l'opzione SANN), quest'ultima delle quali potrebbe essere utile in caso di problemi di ottimizzazione difficili. Esistono anche numerosi ottimizzatori disponibili su CRAN. rgenoud, ad esempio, fornisce un algoritmo genetico per l'ottimizzazione.DEoptimutilizza una diversa routine di ottimizzazione genetica. Gli algoritmi genetici possono essere lenti a convergere, ma di solito sono garantiti a convergere (nel tempo) anche quando ci sono discontinuità nella probabilità. Non lo so DEoptim, ma rgenoudè impostato per l'uso snowper l'elaborazione parallela, il che aiuta in qualche modo.

Quindi, una risposta probabilmente alquanto insoddisfacente è che dovresti usare nlmo qualsiasi altro ottimizzatore se funziona per i dati che hai. Se hai una probabilità ben educata, una qualsiasi delle routine fornite da optimo nlmti darà lo stesso risultato. Alcuni possono essere più veloci di altri, il che può o non può importare, a seconda delle dimensioni del set di dati, ecc. Per quanto riguarda il numero di parametri che queste routine possono gestire, non lo so, anche se probabilmente è un bel po '. Naturalmente, più parametri hai, più è probabile che tu abbia problemi di convergenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.