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
。
是否有合适的方法来执行 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
。