Сравнение моделей с dplyr и broom :: glance: как продолжить, если выдается ошибка?

Я хотел бы запустить каждую переменную в наборе данных как одномерную модель glmer с использованием пакета lme4 в R. Я хотел бы подготовить данные с помощью пакетов dplyr / tidyr и организовать результаты каждой модели с помощью пакета broom (т.е. (взгляд (глмер ...). Я был бы очень признателен за помощь, которая застряла в этой структуре. Я не так хорош в R, но смог создать набор данных, который выдает ошибку и имеет ту же структуру, что и данные, которые я ' m используя:

library(lme4)
library(dplyr)
library(tidyr)
library(broom)

Bird<-c(rep(c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),10))
Stop<-c(rep(seq(1,10), 20))
Count<-c(rep(c(rep(c(1,2), each=10)), each=10))
Route<-c(rep(seq(1,10), each=20))
X1<-rnorm(200, 50, 10)
X2<-rnorm(200, 10, 1)
X3<-c(rep(c(0),200))#trouble maker variable

Data<-data.frame(cbind(Bird, Stop, Count, Route, X1, X2, X3))

Data%>%
  gather(Variable, Value, 5:7)%>%
  group_by(Variable)%>%
  do(glance(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=.,     family=binomial)))

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

do(try(glance(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=.,       family=binomial))))

что он делает, но по-прежнему вывод не создается, потому что он не может принудить "try-error" к data.frame. К сожалению, нет функции tryharder. Я пробовал некоторые операторы if, которые имеют смысл для меня, но не для компьютера. Я уверен, что делаю это неправильно, но если я, например, использую:

try(glance(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=., family=binomial)))->mod
if(is.data.frame(mod)){do(mod)}

Я получаю ошибки за пределами допуска. Большое спасибо за любой вклад, который вы можете предоставить!


person Kevin    schedule 19.08.2016    source источник


Ответы (1)


Используйте tryCatch перед вызовом glance:

zz = Data %>%
  gather(Variable, Value, 5:7) %>%
  group_by(Variable) %>%
  do(aa = tryCatch(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=., 
                  family=binomial), error = function(e) data.frame(NA))) 


zz %>% 
  glance(aa)
person tchakravarty    schedule 19.08.2016
comment
Невероятный! Большое спасибо! - person Kevin; 19.08.2016