Распараллеливание BMA в R - PullRequest
0 голосов
/ 18 января 2019

Я оцениваю некоторые модели, используя байесовское усреднение моделей. Я хочу парализовать процесс, поэтому я пытаюсь:

library(BMA)
library(parallel)

no_cores <- detectCores() - 1
cl <- makeCluster(no_cores)

bma_resp <- function(i) { 

  bma1 <- bicreg(
  x.quest,
  y.quest,
  wt = rep(1, length(y.quest)),
  strict = FALSE,
  OR = 20,
  maxCol = 31,
  drop.factor.levels = FALSE,
  nbest = 70
)
  return(bma1)
}
final <- mclapply(1, bma_resp)

Делая это, я ничего не получил. Я использую 64-битный R в Ubuntu с 8 ядрами и 64 ГБ оперативной памяти.

Спасибо.

1 Ответ

0 голосов
/ 18 января 2019

Я предпочитаю библиотеку foreach для подобных задач. Вы можете сделать это с этим следующим образом. Поскольку у меня нет никаких данных, я использую примеры данных из документации, хотя они всегда получают один и тот же результат, поскольку я не могу их повторить. Но вы можете легко проверить, работает ли он парализовано.

library(foreach)
library(parallel)
library(doParallel)
library(MASS) #just used for the UScrime data from documentation of BMA

data(UScrime)
registerDoParallel(**number of cores you want to use**)

bma_dat <- foreach(i=1:60)%dopar%{
  library(BMA)
  x.quest <- UScrime[,-16]
  y.quest <- UScrime[,16]
  bma1 <- bicreg(
                 x.quest,
                 y.quest,
                 wt = rep(1, length(y.quest)),
                 strict = FALSE,
                 OR = 20,
                 maxCol = 31,
                 drop.factor.levels = FALSE,
                 nbest = 70
                 )
  return(bma1)
}

Вывод представляет собой вложенный список, который вы можете адресовать отдельно

Для получения дополнительной информации см. документацию foreach

Затем используйте i для различных шагов итерации ваших данных (x.quest/y.quest) и измените конец цикла на количество необходимых итераций. Вы можете сделать это легко с помощью length(df) или чего-то подобного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...