我正在为一个相对较大的数据集寻找拟合广义线性混合效应模型的策略建议。
想想看,我有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
。我有理论动机假设count
和length_pass
之间存在团队层面的差异,因此多层次(即混合效应)模型似乎是合适的。
我的单独级别控制变量是length_pass
和year
。
在团队层面,我有mean_length_pass_team
。Snijders,2011年说,这应该有助于我避免生态谬误。
我一直在使用lme4
和brms
软件包来估计这些型号,但在我的本地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")
我正在寻找加快拟合过程的建议或新技术来拟合广义线性混合效应模型:
- (如何)我可以提高
lme4
和brms
拟合的速度 - 是否还有其他方案需要考虑
- 是否有逐步程序可以帮助提高拟合模型的速度
- 在R环境之外有没有有趣的选择可以帮助我适应这一点
非常感谢任何指针!
我发现,对于MCMCglmm
可以适应的型号,包MCMCglmm
比brms
快得多(我有时发现brms
适合我不能适应MCMCglmm
的型号)。
你可能需要摆弄一下语法,但它可能是这样的:
MCMCglmm(data = data, family = "poisson",
fixed = count ~ year,
random = ~ team)
缺点是,我发现过去很难找到许多与模型的明确数学公式相关的在线代码示例——很难判断你是否适合你想要适合的模型。然而,您的模型似乎足够简单。
对于一般的速度改进,我建议使用openBLAS而不是原生BLAS。不幸的是,我不相信LME4依赖BLAS。
然而,我也可以建议并行生成LME4模型,这将有效地将您的等待时间减半。