Я пытаюсь построить логистическую модель c регрессии с 3 предикторами, и у меня есть список идентификаторов для каждого предиктора, как показано ниже. (на примере набора данных mtcars
)
var1 <- c("mpg", "cyl", "disp")
var2 <- c("mpg", "hp", "wt")
var3 <- c("drat", "wt", "gear", "carb")
Я хочу построить несколько регрессионных моделей с каждым из этих идентификаторов. am
- фиксированная переменная, которую я хочу предсказать, поэтому каждая из моих моделей будет выглядеть так:
mod1 <- glm(am ~ mpg + mpg + drat, data=mtcars, ...)
mod2 <- glm(am ~ mpg + mpg + wt, data=mtcars, ...)
mod3 <- glm(am ~ mpg + mpg + gear, data=mtcars, ...)
...
mod5 <- glm(am ~ mpg + hp + drat, data=mtcars, ...)
...
mod9 <- glm(am ~ mpg + wt + drat, data=mtcars, ...)
...
mod36 <- glm(am ~ disp + wt + carb, data=mtcars, ...)
Таким образом, в этом случае это будет 3 * 3 * 4 = всего 36 моделей. Я пытаюсь использовать apply
, как показано ниже.
coefs_mat <- expand.grid(var1, var2, var3)
mods = apply(coefs_mat, 1, function(row) {
glm(as.formula(am ~ row[1] + row[2] + row[3]), data = mtcars,
family = "binomial",control=list(maxit=20))
})
(+ Edit: coefs_mat
выглядит как показано ниже:
>coefs_mat
var1 var2 var3
1 mpg mpg drat
2 cyl mpg drat
3 disp mpg drat
4 mpg hp drat
...
36 disp wt carb
Это дает следующую ошибку: «объект тип "закрытие" не является подмножеством ".
Я искал другие сообщения Stackoverflow, в которых были похожие проблемы, и вместо этого попробовал следующее:
mods = apply(coefs_mat, 1, function(row) {
glm(as.formula(paste("am~", row[1] + row[2] + row[3])), data = mtcars,
family = "binomial",control=list(maxit=20))
})
Но это дало другую ошибку:« Ошибка в строке [1] + row [2]: нечисловой c аргумент двоичного оператора ". Что вызывает эти ошибки в моем коде?