【问题标题】:Big data: generalized linear mixed-effects models大数据:广义线性混合效应模型
【发布时间】:2018-04-04 04:52:30
【问题描述】:

我正在寻找针对相对较大的数据集拟合广义线性混合效应模型的策略的建议。

假设我有 10 年内大约 300 支球队的 800 万次美国篮球传球数据。数据看起来像这样:

data <- data.frame(count = c(1,1,2,1,1,5),
               length_pass= c(1,2,5,7,1,3),
               year= c(1,1,1,2,2,2),
               mean_length_pass_team= c(15,15,9,14,14,8),
               team= c('A', 'A', 'B', 'A', 'A', 'B'))
data
 count length_pass year mean_length_pass_team team
1     1           1    1                    15    A
2     1           2    1                    15    A
3     2           5    1                     9    B
4     1           7    2                    14    A
5     1           1    2                    14    A
6     5           3    2                     8    B

我想解释一下count 球员在传球前所采取的步骤。我有理论动机假设 countlength_pass 之间存在团队级别的差异,因此多级别(即混合效果)模型似乎是合适的。

我的个人级别控制变量是length_passyear

在团队级别我有mean_length_pass_team。根据Snijders, 2011,这应该有助于我避免生态谬误。

我一直在使用 lme4brms 包来估计这些模型,但是在我的本地 12 核 128GB 机器上安装这些模型需要几天/几周的时间。

library(lme4)
model_a <- glmer(count ~ length_pass + year + mean_length_pass_team + (1 | team),
                 data=data,
                 family= "poisson",
                 control=glmerControl(optCtrl=list(maxfun=2e8))) 

library(brms)
options (mc.cores=parallel::detectCores ())
model_b <- brm(count ~ length_pass + year + mean_length_pass_team + (1 | team),
                 data=data,
                 family= "poisson")

我正在寻找加快拟合过程的建议或新技术来拟合广义线性混合效应模型:

  • (如何)我可以提高lme4brms 配合的速度吗?
  • 还有其他需要考虑的包吗?
  • 是否有逐步程序可以帮助提高拟合模型的速度?
  • 在 R 环境之外是否有一些有趣的选项可以帮助我适应这种情况?

任何指针都非常感谢!

【问题讨论】:

  • 也许this 可以提供帮助。
  • @F.Privé 看起来 biglm 包不接受多级公式 - 即 |是有问题的。但是感谢您的想法!
  • 可能帮不上什么忙,但stackoverflow.com/questions/44677487/… 建议nAGQ=0 加快速度或试试Julia
  • 也许你可以试试 Stan 的自动变分推理?大约一年前我尝试过它,它似乎有点错误,但我相信他们从那时起已经做出了改进。
  • 它更快,更快(因为它不是 MCMC)。不确定我是否 100% 相信它,但你可以试一试。 Paper here

标签: r performance bigdata lme4 mixed-models


【解决方案1】:

对于一般的速度改进,我建议使用openBLAS 而不是本机 BLAS。不幸的是,我不相信 LME4 依赖于 BLAS。

不过,我也可以推荐generating the LME4 models in parallel,这样可以有效地将您的等待时间缩短一半。

【讨论】:

  • 确实 lme4 不使用 BLAS,因为它需要一些位于 Eigen 包中的精美线性代数 ...
【解决方案2】:

我发现 MCMCglmm 包对于 MCMCglmm 可以适应的模型比 brms 快得多(我有时发现 brms 适合我无法适应 MCMCglmm 的模型)。

您可能需要玩弄语法,但应该是这样的:

    MCMCglmm(data = data, family = "poisson",
             fixed = count ~ year, 
             random = ~ team)

缺点是过去我发现很难找到许多与模型的明确数学公式相关的在线代码示例 - 可能很难判断您是否正在拟合您想要拟合的模型.但是,您的模型似乎很简单。

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2014-11-17
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多