【问题标题】:Understanding glmer algorithm; help with debugging using R了解 glmer 算法;帮助使用 R 进行调试
【发布时间】:2019-10-31 14:40:06
【问题描述】:

我正在尝试在 Haskell 中复制 lme4 的一些子集。我已经或多或少地管理了lmer 部分,其结果与 Bates (2009)“lme4 中的线性混合模型实现”论文中的示例相匹配。所以现在我进入了广义的位。 稍微让人放心的一件事是,我可以使用高斯族和恒等链接函数在 lmer 示例上运行我的 glmer 等效项。所以事情并没有大错特错。 但是当我尝试匹配 cbpp 示例时,即使是我尝试匹配的非常简化的版本

example <- glmer(incidence/size ~ 1 + (1 | herd), data = cbpp,
                 family = binomial(), weights = size)

事情不正常。我的意思是我的 Haskell 版本 (https://github.com/adamConnerSax/glm-haskell/blob/GLMMs/test/glm/GLMM-test.hs) 不会收敛到相同的答案。

有两件事会很有帮助:

  1. 对于 glmer 算法,有没有比 Bates 的各种论文(2007、2009、2018)更好的参考?这些都在 LMM 部分有很多细节,但在 GLMM 位上却少得多。

  2. 假设我运行了上面的代码,结果为example。在 lme4 中,有没有办法在给定的betau 处获取各种偏差函数的值而不是解决方案?我可以只运行迭代重加权最小二乘法以获得固定值theta,而不是运行整个优化循环吗? R 和我的 Haskell 代码之间的比较点越多,我就越容易看出哪里出错了。

【问题讨论】:

  • 我对其进行了编辑以显着缩小其范围。抱歉太宽泛了!可以不举行吗?谢谢!
  • "Things don't work" 作为对您的问题的描述几乎毫无用处——而且不一定正确,因为您的示例可以被复制并且运行良好。如果您可以提供您所面临问题的可重现示例,这很可能适合Stack Overflow
  • 好的!又试了一次。我在这个论坛上提问是因为我认为了解 glmer 工作原理的人最有可能提供帮助。但是你想让我缩小问题的范围。最重要的部分是 R 调试,我可以看到剩下的内容可能更适合 stackoverflow。我知道“事情不起作用”并不是特别有用。我现在链接到我的非工作 Haskell 代码,以防有人想重现我的问题。但我希望得到更多关于算法的信息以及一些关于如何在 R 中获得中间结果以进行调试的提示。

标签: r


【解决方案1】:
  1. 你可以通过lme4on r-forge 获得关于GLMMs 详细理论和实现的未完成的草稿(大多数lme4 开发已经从r-forge 转移到了GitHub,但是这篇论文的草稿还在在这里)

  2. 你完全可以单独获得偏差函数。最简单的方法可能是采用拟合模型并运行update(fitted_model, devFunOnly=TRUE)(或者您可以采用相同的参数集并首先添加devFunOnly=TRUE)。关于第一次(nAGQ=0)或第二次(nAGQ&gt;0)是否正在运行,有一些潜在的棘手问题;见?modular

    但是,这个偏差函数可能不是您想要的,因为它需要 betatheta -- 但不是 u -- 作为输入。在偏差函数中,pwrssUpdate 函数运行 PIRLS 算法。但这至少会让你更接近……你可以看看源代码,或者如果你存储了一个偏差函数devfun,你可以看看environment(devfun)$pwrssUpdate

【讨论】:

  • 谢谢!!该 pdf 将非常有帮助,更直接的方式可以看到 devFun 的价值。我看了一堆代码,但我不懂 R,而且 C++ 有时很难理解。我想我发现了第一次/第二次通过的东西,但我不知道那是什么。任何 theta 的第一次迭代是否使用不同的积分近似值完成?
猜你喜欢
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多