![](/img/trans.png)
[英]Reverting to previous ordering of factor after using relevel() and fitting GLM in R
[英]Fitting a glm using variable as a column name in R
我试图使用变量而不是列名称在R中使用glm()
,但它不起作用。 这可以帮助我自动生成glms。 当我使用列名称适合glm
,程序运行正常,当我用包含列名的变量交换列名时,程序给出并出错。
这是我的命令的样子:
##The data
mydata <- structure(list(var1 = c(10L, 100L, 50L, 40L, 20L, 50L, 60L, 55L,
45L), var2 = c(1.5, 1.2, 1, 1.4, 1.2, 1.4, 1.3, 1.4, 1.3), var3 = c(5L,
3L, 4L, 1L, 5L, 2L, 7L, 5L, 4L), group = structure(c(1L, 1L,
2L, 2L, 1L, 1L, 2L, 1L, 1L), .Label = c("A", "B"), class = "factor")), .Names = c("var1",
"var2", "var3", "group"), class = "data.frame", row.names = c(NA,
-9L))
## My variable
x <- c("var1+var2")
##Fitting the model
myglm <- glm(formula = group ~ var1+var2 , family = "binomial", data = mydata) ## works fine
myglm2 <- glm(formula = group ~ x , family = "binomial", data = mydata)
Error in model.frame.default(formula = group ~ x, data = mydata, drop.unused.levels = TRUE) :
variable lengths differ (found for 'x')
我尝试使用paste(x)
和cat(x)
函数,但它没有用。 可以在R中这样做吗? 我需要使用它,因为我在for循环中制作大约1000 glm
。
使用as.formula
编辑,甚至更简单:
valid.names <- names(mydata)[names(mydata) != "group"] # all but group
for(i in 2:length(valid.names)) {
frm <- as.formula(paste("group ~", valid.names[i - 1], "+" , valid.names[i]))
myglm <- glm(formula = frm, family = "binomial", data = mydata) ## works fine
}
旧版本
这是使用parse
的潜在解决方案:
valid.names <- names(mydata[, -4]) # all but group
frm <- group ~ x
for(i in 2:length(valid.names)) {
varplusvar <- parse(text=paste(valid.names[i - 1], "+" , valid.names[i]))[[1]]
frm[[3]] <- varplusvar
myglm <- glm(formula = frm, family = "binomial", data = mydata) ## works fine
}
当您想要基于字符串创建公式时,函数reformulate
非常有用。 你不需要paste
:
x <- c("var1+var2")
form <- reformulate(x, response = "group")
# group ~ var1 + var2
glm(formula = form , family = "binomial", data = mydata)
as.formula让它变得非常简单。 对于此特定实例,使用您在问题中创建的数据:
mytarget <- "group"
myFormula <- as.formula(paste(mytarget,"~ var1 + var2"))
myglm <- glm(myFormula, family = "binomial", data = mydata)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.