在 R 中拟合特殊的混合模型 - optim() 的替代方法

机器算法验证 r 优化
2022-03-26 07:00:12

我想在 R 中做一些 SAS 可以使用 SAS 的 proc 混合来做的事情(在 STATA es ​​中有一些方法可以做),即拟合 Reitsma 等人(2005)的所谓双变量模型。该模型是一种特殊的混合模型,其中方差取决于研究(见下文)。谷歌搜索并与一些熟悉模型的人交谈并没有产生一种同时快速的直接方法(即一个很好的高级模型拟合函数)。尽管如此,我确信,R 中有一些可以快速构建的东西。

简而言之,一个人面临以下情况:给定人们希望拟合一个正态于 logit 转换对的二元变量。由于比例来自 2x2 表(即二项式数据),因此每个 logit 转换的观察比例都有一个方差估计值,该估计值将包含在拟合过程中,例如因此,人们想对这些对拟合一个二元法线,其中协方差矩阵取决于观察结果,即(p1,p2)[0,1]2(s1,s2)Σ

(logit(p1),logit(p2))N((mu1,mu2),Σ+S)

其中 S 是的对角矩阵,完全取决于数据,但因观察而异。mu 和 Sigma 对于所有观察都是相同的。(s1,s2)

现在我正在使用调用optim()(使用 BFGS)来估计五个参数(的三个参数)。然而,这非常缓慢,尤其不适合模拟。我的目标之一是稍后为 mu 引入回归系数,增加参数的数量。μ1μ2Σ

我尝试通过提供起始值来加速拟合,我还考虑过计算五个参数的梯度。由于添加了,可能性变得相当复杂,我觉得以这种方式引入错误的风险太大,因此还没有尝试过,也没有找到检查计算的方法。S

梯度的计算通常值得吗?你如何检查它们?

我知道除此之外的其他优化器optim(),即nlm()我也知道 CRAN 任务视图:优化。哪些值得一试?

optim()除了降低精度,还有哪些技巧可以加快速度?

我将非常感谢任何提示。

1个回答

这可能不是您预期的解决方案,但我认为您可以将此模型与 brms(即作为 Stan 的接口)配合使用,它所谓的“分布式模型”......见https://cran.r- project.org/web/packages/brms/vignettes/brms_distreg.html

另请参阅此处的概述小插图,它显示了如何拟合二项式模型。https://cran.r-project.org/web/packages/brms/vignettes/brms_overview.pdf