Передача семейства glm в функцию и сравнение двух подходящих моделей с использованием критерия отношения правдоподобия - PullRequest
0 голосов
/ 05 марта 2020

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

library(mice)

fun_1 <- function(my_data, my_family) {

  imp <- mice(my_data, seed = 51009, print = FALSE)

  mi1 <- with(data = imp, expr = glm(bmi ~ age + hyp + chl, family = my_family))
  mi0_1 <- with(data = imp, expr = glm(bmi ~ age + hyp, family = my_family))
  mi0_2 <- with(data = imp, expr = glm(bmi ~ age + chl, family = my_family))

  lapply(list(mi0_1, mi0_2), function(x) mice::D3(fit1 = mi1, fit0 = x))

}

fun_1(my_data = nhanes2, my_family = "gaussian")

Когда я запускаю эту функцию, я получаю ошибку:

 Error in glm(formula = bmi ~ 1, family = my_family, data = cbind(data,  : 
  object 'my_family' not found

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

fun_2 <- function(my_data, my_family) {

  glm(bmi ~ age + hyp + chl, family = my_family, data = my_data)

}

fun_2(my_data = nhanes2, my_family = "gaussian")

И если я только передаю данные в fun_1, то все работает хорошо

fun_3 <- function(my_data) {

  imp <- mice(my_data, seed = 51009, print = FALSE)

  mi1 <- with(data = imp, expr = glm(bmi ~ age + hyp + chl, family = "gaussian"))
  mi0_1 <- with(data = imp, expr = glm(bmi ~ age + hyp, family = "gaussian"))
  mi0_2 <- with(data = imp, expr = glm(bmi ~ age + chl, family = "gaussian"))

  lapply(list(mi0_1, mi0_2), function(x) mice::D3(fit1 = mi1, fit0 = x))    

}

fun_3(my_data = nhanes2)

Как ни странно, в fun_1 проваливаются не регрессии, а тест отношения правдоподобия (D3 ) позже.

Что я делаю не так? Как я могу сделать эту работу?

...