R:SQUAREM与TURBOEM进行定点收敛?

时间:2016-09-22 14:24:15

标签: r

我在R中有一个计算,需要迭代地调用函数进行固定点收缩映射。我一直在使用Ravi Varadhan的squarem包中的SQUAREM函数。今天我试图找到解决我遇到squarem问题的方法时,我遇到了TURBOEM包裹,也是Varadhan。乍一看,TURBOEM似乎与SQUAREM做同样的事情,但在某些方面具有其他功能。

是否有人知道这些包中的一个或另一个是优选的,无论是一般情况还是特定应用程序?比另一个更新/更新吗? TURBOEM似乎能够自定义收敛标准,这可能会让我脱离当前的绑定,但我担心可能还有其他问题。显然我可以从每个软件包中测试相应的功能,但如果有人知道这两个软件包的背景,那么可能会节省很多时间。

2 个答案:

答案 0 :(得分:3)

每个包使用四种基础SQUAREM算法。它们实际上完全相同*。您可以使用以下方法查看自己的基础功能:

SQUAREM:::cyclem1
SQUAREM:::cyclem2
SQUAREM:::squarem1
SQUAREM:::squarem2
turboEM:::bodyCyclem1
turboEM:::bodyCyclem2
turboEM:::bodySquarem1
turboEM:::bodySquarem2

*除了由于在包装内使用它们的方式之外的一些差异。 methodSQUAREM中的参数versionturboEM中被称为turboEM

我想说turboEM一般可能是首选,原因如下:

  • 正如您所提到的,convtype = "parameter"允许用户根据参数向量(convtype = "objfn")中的变化的L2范数,变量的L1范数来选择收敛标准。在目标函数(convfn.user)中,或通过指定自定义函数(SQUAREM)。 turboEM仅使用参数向量中的变化的L2范数来检查收敛。
  • stoptype = "maxiter"还可以在收敛之前根据迭代次数(stoptype = "maxtime")或经过的时间量(SQUAREM)停止算法。 pconstr仅在指定的迭代次数后停止。
  • project的{​​{1}}和turboem参数允许用户定义参数空间约束,以及在违反这些参数时将估计投影回参数空间的函数。 SQUAREM没有此功能。
  • turboEM可以轻松地将多个版本的算法应用于相同的数据(例如,使用不同的顺序,步长,......),为method参数提供一个向量,并list 1}}到control.method参数......
  • ...它可以通过foreach包并行执行此操作。
  • turboEM还提供了一个方便的界面来应用vanilla EM算法,以及SQUAREM以外的EM加速方案:抛物线EM(method = "pem"),动态ECME("decme" )和准牛顿("qn")。
  • turboEM包还提供turboSim功能,允许用户轻松进行基准研究,比较不同的加速方案。

我可以看到使用turboEM代替SQUAREM的一个缺点是,如果您真的对SQUAREM算法的细节感兴趣,trace由{squarem提供1}}提供比turboem提供的更具体的信息(残差,外推,步长)(目标函数[如果计算],迭代次数,参数变化的L2范数)。

最后一个:SQUAREM on CRAN(v 2016.8-2)的当前版本确实比turboEM on CRAN的版本更新(v 2014.8-1)。但是,NEWS表明自2010年12月以来SQUAREM的唯一更新是小插曲和演示,而turboEM的首次发布是在2011年12月。

答案 1 :(得分:2)

感谢您对SQUAREM和turboEM的关注。我是两个包的作者。将来,如有任何问题,您可以直接与我联系。

2个套餐的目标不同。 SQUAREM实现了一类加速方法。另一方面,turboEM包括各种最先进的EM加速技术。 turboEM的目标是为您的所有EM加速需求提供最佳选择!特别是,turboEM允许您针对您的问题对不同的算法进行基准测试,并确定最佳算法。根据我的经验,平方类算法最常用于执行其他3个类(准牛顿,动态EM和抛物线EM)。因此,您也可以直接使用SQUAREM包。但是,如Mark所指出的,turboEM还有许多其他功能。

Ravi Varadhan