簡體   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