R: SQUAREM vs. TURBOEM for fixed point convergence? -
i have calculation in r needs iteratively call function fixed point contraction mapping. i've been using squarem
function out of squarem
package ravi varadhan. today while trying figure out way around issue having squarem
came across turboem
package, varadhan. @ first glance turboem
seems same things squarem
, additional functionality in dimensions.
does know whether 1 or other of these packages preferred, either in general or particular applications? 1 more current/updated other? turboem
seems have ability customize convergence criterion, might me out of current bind i'm in, i'm concerned there might other issues. can go off , test corresponding functions each package, if out there knows background on 2 packages might save me ton of time.
there 4 underlying squarem algorithms used each package. identical*. can see underlying functions using:
squarem:::cyclem1 squarem:::cyclem2 squarem:::squarem1 squarem:::squarem2 turboem:::bodycyclem1 turboem:::bodycyclem2 turboem:::bodysquarem1 turboem:::bodysquarem2
* apart differences due way in these used within packages. , argument method
in squarem
called version
in turboem
i turboem
preferred in general, following reasons:
- as mention,
turboem
allows user select convergence criterion, either based on l2-norm of change in parameter vector (convtype = "parameter"
), l1-norm of change in objective function (convtype = "objfn"
), or specifying custom function (convfn.user
).squarem
checks convergence using l2-norm of change in parameter vector. turboem
can stop algorithm prior convergence based on either number of iterations (stoptype = "maxiter"
) or amount of time elapsed (stoptype = "maxtime"
).squarem
stops after specified number of iterations.- the
pconstr
,project
argumentsturboem
allow user define parameter space constraints , function projects estimates parameter space if these violated.squarem
not have functionality. turboem
can apply multiple versions of algorithm same data (e.g. different orders, step sizes, ...), providing vectormethod
argument ,list
control.method
argument...- ... , can in parallel via
foreach
package. turboem
offers convenient interface through apply vanilla em algorithm, em acceleration schemes other squarem: parabolic em (method = "pem"
), dynamic ecme ("decme"
) , quasi-newton ("qn"
).- the
turboem
package providesturbosim
function, allows user conduct benchmark studies comparing different acceleration schemes.
the 1 downside can see using turboem
instead of squarem
that, if interested in particulars of squarem algorithm, trace
provided squarem
gives more specific information (residual, extrapolation, step length) provided turboem
(objective function [if calculated], iteration number, l2-norm of parameter change).
one final aside: current version of squarem
on cran (v 2016.8-2) has indeed been updated more version of turboem
on cran (v 2014.8-1). however, news suggests updates squarem
since december 2010 have been vignettes , demos, while turboem
's first release in december 2011.
Comments
Post a Comment