繁体   English   中英

如何在R的循环中包含GLM

[英]How do I include GLM in a loop in R

我的GLM模型工作正常,但是为了加快速度,我想在循环中包含变量名称,并让R为每个变量计算GLM。 所以我尝试了这个:

varlist <- c("age", "doc")

for (i in 1:length(varlist))
{

glmmodel <- glm(formula = Kommunikation ~ varlist[i], family = binomial, data = analysis_data)

univars[i,1] <- names(coef(glmmodel))[2]
univars[i,2] <- exp(confint.default(glmmodel)[2,1])
univars[i,3] <- exp(glmmodel$coefficients[2])
univars[i,4] <- exp(confint.default(glmmodel)[2,2])

}

不幸的是,这导致错误:

Error in model.frame.default(formula = Kommunikation ~ varlist[[i]], data = analysis_data,  : 
  variable lengths differ (found for 'varlist[[i]]')

当我用变量名agedoc替换varlist[i]时,GLM模型起作用了,我猜这可能是由R​​替换变量名时如何读取字符引起的? (我有26个变量,但仅出于方便而发布了两个。)

问题是您要在对glm()调用中将字符串放入公式中。 这是一个可能的解决方案,其中将字符串传递给对as.formula的调用,然后在模型中使用该公式。

df <- data.frame(y = rbinom(10, 1, 0.5), x1 = rnorm(10), x2 = rnorm(10))

varlist <- c("x1", "x2")

univars <- data.frame()  # create an empty data frame so the rest of your code works

for (i in seq_along(varlist))
{

mod <- as.formula(sprintf("y ~ %s", varlist[i]))

glmmodel <- glm(formula = mod, family = binomial, data = df)

univars[i,1] <- names(coef(glmmodel))[2]
univars[i,2] <- exp(confint.default(glmmodel)[2,1])
univars[i,3] <- exp(glmmodel$coefficients[2])
univars[i,4] <- exp(confint.default(glmmodel)[2,2])

}

结果:

> univars
  V1        V2        V3        V4
1 x1 0.4728192 3.1185658 20.569074
2 x2 0.1665581 0.7241709  3.148592

另外,我倾向于使用lapply而不是for循环来执行此操作,从而创建可以绑定的行。 但这有效。

暂无
暂无

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

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