r - R逻辑回归在循环中提取系数:设置循环时出错
问题描述
我正在尝试使用 3 个预测变量构建逻辑回归模型,并且我有一个每个预测变量的 ID 列表,如下所示。(以mtcars
数据集为例)
var1 <- c("mpg", "cyl", "disp")
var2 <- c("mpg", "hp", "wt")
var3 <- c("drat", "wt", "gear", "carb")
我想使用这些 ID 中的每一个来构建多个回归模型。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))
})
(+ 编辑: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
这会产生以下错误:“'closure' 类型的对象不是子集的”。
我搜索了其他有类似问题的 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] + 行 [2] 中的错误:二元运算符的非数字参数”。是什么导致我的代码中出现这些错误?
解决方案
我通过使用解决了这个问题sprintf
。
var1 <- c("mpg", "cyl", "disp")
var2 <- c("mpg", "hp", "wt")
var3 <- c("drat", "wt", "gear", "carb")
coefs_mat <- expand.grid(var1, var2, var3)
vars_comb <- apply(coefs_mat, 1, function(x){paste(sort(x), collapse = '+')})
formula_vec <- sprintf("am ~ %s", vars_comb)
glm_res <- lapply(formula_vec, function(x) {
fit1 <- glm(x, data = mtcars, family = binomial("logit"))
return(fit1)
})
推荐阅读
- powershell - 向迭代的 ArrayList 添加“非标准”值
- javascript - 在 firefox 的同一个选项卡上触发“storage”事件
- javascript - 如何在url中放参数
- linux - 如何在 Linux 上安装 xwobf
- prometheus - Prometheus:使用正则表达式减少重复规则
- triggers - 使用连接器/Python 创建触发器 - MySQL
- flutter - Flutter - 我想通过 onLongPress 选择卡片?
- java - java.io.FileNotFoundException:abaa.wav?
- java - 如何从方法返回所有结果集值。爪哇
- javascript - 永久删除跨度标记以及 html 中的文本