2016-06-13 7 views
0

В R я использую Rjags, который вызывает JAGS для образца для последующего распределения, которое возвращает образцы в форме mcmc.list. Моя цель - принять режим каждой выборочной переменной (первой цепочки), представленной в форме mcmc.list.Эффективный способ расчета режима объекта mcmc.list в R или Как преобразовать mcmc.list в тип данных ff? (Обработка больших данных типа mcmc.list)

Когда я загружаю файл объекта mcmc.list, он потребляет 8 из 24 ГБ оперативной памяти, к которой у меня есть доступ. Кроме того, когда я использую приведенный ниже метод для вычисления его режима, ОЗУ пересекает метку 23 ГБ, и процесс выходит из строя.

Я считаю, что есть лучшие и эффективные способы сделать это, поэтому, если кто-то может выбросить какой-то свет.

Метод, который я использую для генерации режима, приведен ниже. Здесь образцы [[1]] является первой цепью mcmc.list

Mode<-lapply(samples[[1]], function(x){ ux <- unique(x) 
    ux[which.max(tabulate(match(x, ux)))]}) 

Я также смотрел на пакет и след, так как в приведенном выше примере это только половину моего набора данных. Я не могу понять, как преобразовать mcmc.list в фрейм данных типа ff. sample<-as.ffdf(samples[[1]]) берет навсегда выполнение.

Если кто-то может предоставить некоторые ресурсы, объясняющие пакет ff подробно, например, это тоже было бы здорово. Спасибо

ответ

1

Если проблема просто вычислительная, я бы предложил разбавить цепочку так, чтобы выход был не таким большим. Существует аргумент thin в функции jags.samples, который можно использовать для уменьшения размера вывода.

И наоборот, вы можете попробовать преобразовать образцы в матрицу. Для этого потребуется пакет coda.

samples_matrix <- as.matrix(samples, chains = TRUE) 

Таким образом, вы можете рассчитать режим меньших частей задней части.

+0

Я использую 20000 образцов. Сколько вы порекомендуете мне похудеть? Я использовал n.thin = 3. –

+0

В настоящее время ваш выход составляет ~ 8 ГБ, и вы прореживаетесь на 3, что вызывает проблемы с вычислением. Вы не хотите так сильно утончаться, чтобы у вас не было много образцов из вашего заднего, но вы должны достаточно тонко, чтобы вы могли его суммировать. Я бы рекомендовал прореживание на 5 или 6, что, надеюсь, уменьшит размер вашей продукции. –