R如何为我的data.frame中的每个级别执行多个GLM?

时间:2015-05-06 16:25:50

标签: r loops glm tapply

是否有适当的方法来进行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回归的向量,但我不想使用循环。我该怎么办?

1 个答案:

答案 0 :(得分:3)

我认为错误是由于无法理解定义函数的R语法(以及不知道诸如“月”之类的列名不可用作全局变量而导致的另一个错误。请尝试改为:

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函数,该函数在rownames内部使用tapply