У меня есть функция, которая вменяет данные, подбирает модели и сравнивает модели. Я хотел бы иметь возможность передать семейство 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 ) позже.
Что я делаю не так? Как я могу сделать эту работу?