[英]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]]')
當我用變量名age
和doc
替換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.