繁体   English   中英

R 逻辑回归在循环中提取系数:设置循环时出错

[英]R logistic regression extracting coefficients in a loop: error with setting up loop

我正在尝试使用 3 个预测变量构建逻辑回归 model,并且我有一个每个预测变量的 ID 列表,如下所示。 (以mtcars数据集为例)

var1 <- c("mpg", "cyl", "disp")
var2 <- c("mpg", "hp", "wt")
var3 <- c("drat", "wt", "gear", "carb")

我想使用这些 ID 中的每一个来构建多个回归模型。 am是我想预测的固定变量,所以我的每个 model 看起来像:

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)
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM