Как использовать tryCatch () во время начальной загрузки с modelr / tidyverse? - PullRequest
0 голосов
/ 14 февраля 2020

Этот вопрос похож на Использование tryCatch () для отлова bootstrap l oop, но у меня возникают проблемы с применением предложений к моему случаю с использованием метода начальной загрузки tidyverse. Я пытаюсь получить оценки доверительных интервалов для коэффициентов из сложной модели смешанных эффектов, но некоторые модели терпят неудачу во время bootstrap, останавливая весь процесс начальной загрузки. Я хочу проигнорировать эти неудачные прогоны (но также посчитать и сохранить их, чтобы знать, какие они есть) и продолжить bootstrap. Я также открыт для предложений, используя загрузочный пакет с tryCatch. Пример использования набора данных diamonds:

diamonds <- diamonds 
diamonds$clarity <- factor(diamonds$clarity, ordered=FALSE)
diamonds$cut <- factor(diamonds$cut, ordered=FALSE)
diamonds$color <- factor(diamonds$color, ordered=FALSE)
diamonds <- diamonds[diamonds$price <= 500,] # truncate the data set for faster processing 

Случайная бессмысленная модель, но она работает без ошибок:

my_mod <- glmmTMB(carat ~
     cut*x*poly(depth,3) + table + price + 
     (1|color) + (1|clarity),
     REML=TRUE,
     data = diamonds)
summary(my_mod)

Я хочу произвести выборку с заменой на уровне «ясности» (т. е. кластером, а не наблюдением).

set.seed(30)
my_boot <- diamonds %>% 
modelr::bootstrap(n = 20, id = 'clarity') %>%
group_by(clarity) %>%
mutate(fit = map(strap,
               ~glmmTMB(carat ~
     cut*x*poly(depth,3) +
     table + price + 
     (1|color) + (1|clarity),
     REML=T,
     data = data.frame(.))))

 Warning message:
 In fitTMB(TMBStruc) :
 Model convergence problem; false convergence (8). See vignette('troubleshooting')

1 Ответ

1 голос
/ 14 февраля 2020

Просто оберните tryCatch вокруг вызова на glmmTMB. И напишите error и warning функции. Сообщения об ошибках типа

Время остановлено на: 0,484 0,071 0,556
Время остановлено на: 0,919 0,052 0,972
Время остановлено на: 0,542 0,04 0,583

все равно будет отображаться, но my_boot$fit будет содержать ошибки или предупреждения.

set.seed(30)
my_boot <- diamonds %>% 
  modelr::bootstrap(n = 20, id = 'clarity') %>%
  group_by(clarity) %>%
  mutate(fit = map(strap,
                   ~tryCatch(glmmTMB(carat ~
                              cut*x*poly(depth,3) +
                              table + price + 
                              (1|color) + (1|clarity),
                            REML=T,
                            data = data.frame(.)),
                            error = function(e) e,
                            warning = function(w) w)))

Затем вы можете проверить результаты с помощью

err <- sapply(my_boot$fit, inherits, "error")
warn <- sapply(my_boot$fit, inherits, "warning")
ok <- !(err | warn)

и использовать эти векторы для подстановки списка my_boot. Например:

my_boot[ok]

И то же самое для err и warn.

...