R - 大数据:广义线性混合效应模型

时间:2017-10-23 15:11:25

标签: r performance bigdata lme4 mixed-models

我正在寻找针对相对较大的数据集拟合generalized linear mixed-effects models的策略的建议。

考虑一下我在10年内有大约300支球队的8 million美国篮球传球数据。数据看起来像这样:

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。根据{{​​3}},这应该有助于我避免生态谬误。

我一直在使用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适合的速度吗?
  • 还有其他需要考虑的套餐吗?
  • 是否有step-wise程序可以帮助提高拟合模型的速度?
  • R环境之外是否有可以帮助我适应这个的有趣选项?

非常感谢任何指针!

2 个答案:

答案 0 :(得分:1)

对于 MCMCglmm 适合的模型,我发现包 brmsMCMCglmm 快得多(我有时发现 brms 适合我不能适合的模型)适合MCMCglmm)。

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

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

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

答案 1 :(得分:0)

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

但是,我也可以建议generating the LME4 models in parallel,这会有效地减少你的等待时间。