R 如何针对我的 data.frame 中的一个因素为每个级别执行多个 GLM?

R how to do multiple GLMs for each level for a factor in my data.frame?

是否有合适的方法来执行 R 风格逻辑回归,避免使用循环,但我可以对特定因子的每个水平进行多重回归?

例如,假设 df 是每天 365 行,用二进制表示是否下雨:

multifactorglm(x){
  glm(rained ~ temp + humidity, data=x, family="binomial")
}
tapply(df, month, multifactorglm)

这不会 运行 在 R 中显示以下消息...

Error: unexpected '{' in "multifactorglm(x){"
>   glm(rained ~ temp + humidity, data=x, family="binomial")
Error in eval(predvars, data, env) : 
  numeric 'envir' arg not of length one
> }
Error: unexpected '}' in "}"
> 

我想得到一个 12 glm 回归的向量,但我不想使用循环。我该怎么办?

我认为该错误是由于未能理解 R 定义函数的语法造成的(另外一个错误是不知道诸如 "month" 之类的列名称不可用作全局变量。请尝试:

multifactorglm <- function(x){
  glm(rained ~ temp + humidity, data=x, family="binomial")
}
do.call(rbind, do(df, df$month, multifactorglm) )

如果您真的想要一个完全数字的结果,它可能是:

multifactorglm<- function(x){
  coef( glm(rained ~ temp + humidity, data=x, family="binomial") )
}
do.call( rbind, do(df, df$month, multifactorglm) )

...我认为这将是一个具有 3 列(截距和两个参数列)的矩阵...尽管它在没有数据的情况下未经测试。看着我的第一次努力,我意识到 tapply 不会正确分割数据帧。您可能需要使用 lapply (split(df, df$month) ,multifactorglm)do 函数,该函数内部在行名上使用 tapply