在 data.table 中使用 lmer 预测

using lmer predict in data.table

  library(lme4)
  library(data.table)
  library(dplyr)

  d = data.frame(x = rep(1:100, times = 3),
                 y = NA,
                 grp = rep(1:3, each = 100))

  d$y[d$grp == 1] = 1:100 + rnorm(100)
  d$y[d$grp == 2] = 1:100 * 1.5 + rnorm(100)
  d$y[d$grp == 3] = 1:100 * 0.5 + rnorm(100)

  fit = lmer(y ~ x + (x|grp), data = d)

  new.data <- data.frame(x = 1:100, grp = rep(1:3, each = 100))
  new.data1 = new.data %>% dplyr::mutate(grp = 1)
  new.data2 = new.data %>% dplyr::mutate(grp = 3)

  temp <- new.data %>% 
          dplyr::mutate(predV1 = predict(fit, newdata = new.data1, allow.new.levels = TRUE),
                        predV2 = predict(fit, newdata = new.data2, allow.new.levels = TRUE))

我的实际 new.data 有更多的预测变量、组、更多的观察来预测(~10000 行) 因此,上述 dplyr 解决方案大约需要 34 秒。 我想知道 lmer 预测函数是否可以与 data.table 一起使用来加速它。

如果我们需要在 data.table 中使用类似的方法,请转换为 data.table (setDT) 并将 predict 的输出分配 (:=) 到新列 'predV1'、'predV2'

library(data.table)
setDT(new.data)[, c('predV1', 'predV2') :=
     .(predict(fit, newdata = new.data1, allow.new.levels = TRUE), 
       predict(fit, newdata = new.data2, allow.new.levels = TRUE))]