如何在R函数中使用逻辑回归

时间:2020-06-03 19:10:13

标签: r function logistic-regression glm

我正在尝试在自定义的r函数中使用r base逻辑回归函数,但是我的public void test () { ObjectMapper ymlMapper = Jackson.newObjectMapper(new YAMLFactory()); AppConfiguration configuration = ymlMapper.readValue(fixture("app.yml"), AppConfiguration.class); } 无法识别我的变量。我在搜索引擎中尝试了多个搜索关键字,但是所有答案都与拟合逻辑回归相关。

例如:

第一次尝试:

glm()

另一种方法:

dat <- data.frame(a = c(3,4,5), b = c("a","a","b"))

logit <- function(dataname, x, y) {
  model = glm(y ~ x, data = dataname, family = "binomial")
  model
}

logit(dat, a, b)
Error in eval(predvars, data, env) : object 'b' not found

输出将把我的IV更改为eval(substitute(x),dataname)而不是x。

logit <- function(dataname, x, y) {
  model = glm(eval(substitute(y), dat) ~ eval(substitute(x), dat), family = "binomial")
  model
}

logit(dat, a, b)

有什么办法可以在输出中以正确的IV名称获得正确的输出?

谢谢

2 个答案:

答案 0 :(得分:2)

我同意@IceCreamToucan的观点,最好的方法是将公式传递给函数

logit <- function(dataname, formula) {
  model = glm(formula, data = dataname, family = "binomial")
  model
}

logit(dat, b~a)

否则,您应该首先构建公式,然后将其传递给glm

logit <- function(dataname, x, y) {
  formula <- reformulate(as.character(substitute(x)), as.character(substitute(y)))
  model = glm(formula, data = dataname, family = "binomial")
  model
}

logit(dat, a, b)

答案 1 :(得分:1)

logit <- function(dataname, x, y) {
  model = glm( as.formula(paste(y,  "~", x)),
               data = dataname,
               family = "binomial")
  model
}

logit(dat, "a", "b")

如果您有很多解释变量,则可以传入名称向量并使用:

as.formula(paste(y,  "~", paste(x, collapse="+")))