如何使用 combn 进行多元回归(或替代方法)?
How do I use combn for multiple regression (or an alternative)?
我想从一个因变量对其他两个独立因素的所有组合进行回归得到回归系数和拟合统计量。
我的是这样的数据(注意NA):
H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE)))
H[2,3]<-NA
names(H)<-c("dep",letters[1:9])
所以我想使用lm
对所有这些组合进行回归"ind"。
apply(combn(names(H)[2:9],2), MARGIN=2, FUN=paste, collapse="*")
"axb""axc""axd""axe""axf""axg"...等等
一次一个,我可以得到我想要的:
ab<-data.frame(ind="a*b",cbind(data.frame(glance(lm(data=H,dep~a*b))),
t(data.frame(unlist((lm(data=H,dep~a*b)[1]))))
))
names(ab)[13:16]<-c("int","coef1","coef2","coefby")
ac<-data.frame(ind="a*c",cbind(data.frame(glance(lm(data=H,dep~a*c))),
t(data.frame(unlist((lm(data=H,dep~a*c)[1]))))
))
names(ac)[13:16]<-c("int","coef1","coef2","coefby")
rbind(ab,ac)
我想要的要么是所有这些系数和统计数据,要么至少是模型系数和r.squared。
有人 如何使用 combn 完成几乎完全相同的事情。但是当我尝试使用 glance
而不是 coefs
对此进行修改时
fun <- function(x) glance(lm(dep~paste(x, collapse="*"), data=H))[[1]][1]
combn(names(H[2:10]), 2, fun)
我收到一个错误。我想也许我需要尝试 "dep" 重复 36 次,每 2 个因素组合一次,但那并没有做到。
Error in model.frame.default(formula = dep ~ paste(x, collapse = "*"), :
variable lengths differ (found for 'paste(x, collapse = "*")')
对于所有可能的 dep~x*y 多元回归组合("dep" 始终是我的 y 因变量),我如何一次获得一个系数或所有系数?谢谢!
作为答案发布,因为它显然有效:
我不确定你从哪里得到代码 dep~paste(x, collapse="*")
,在公式中使用 paste
是行不通的,而且我在页面的任何地方都没有看到你 link。您需要将完整的公式构建为字符串。尝试这样的事情:
formula = as.formula(paste("dep ~", paste(x, collapse = "*")))
下次,请展示您用来调用函数的代码,而不仅仅是函数本身。
如果您只想要 "best" 模型,而不是每个模型,您可能还对 leaps
包感兴趣。 ("Best" 在引号中,因为这通常是一种糟糕的模型选择方式,违反了多重比较等的各种统计假设。请查看 LASSO 以获得更好的方法。)
我想从一个因变量对其他两个独立因素的所有组合进行回归得到回归系数和拟合统计量。
我的是这样的数据(注意NA):
H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE)))
H[2,3]<-NA
names(H)<-c("dep",letters[1:9])
所以我想使用lm
对所有这些组合进行回归"ind"。
apply(combn(names(H)[2:9],2), MARGIN=2, FUN=paste, collapse="*")
"axb""axc""axd""axe""axf""axg"...等等
一次一个,我可以得到我想要的:
ab<-data.frame(ind="a*b",cbind(data.frame(glance(lm(data=H,dep~a*b))),
t(data.frame(unlist((lm(data=H,dep~a*b)[1]))))
))
names(ab)[13:16]<-c("int","coef1","coef2","coefby")
ac<-data.frame(ind="a*c",cbind(data.frame(glance(lm(data=H,dep~a*c))),
t(data.frame(unlist((lm(data=H,dep~a*c)[1]))))
))
names(ac)[13:16]<-c("int","coef1","coef2","coefby")
rbind(ab,ac)
我想要的要么是所有这些系数和统计数据,要么至少是模型系数和r.squared。
有人 glance
而不是 coefs
fun <- function(x) glance(lm(dep~paste(x, collapse="*"), data=H))[[1]][1]
combn(names(H[2:10]), 2, fun)
我收到一个错误。我想也许我需要尝试 "dep" 重复 36 次,每 2 个因素组合一次,但那并没有做到。
Error in model.frame.default(formula = dep ~ paste(x, collapse = "*"), :
variable lengths differ (found for 'paste(x, collapse = "*")')
对于所有可能的 dep~x*y 多元回归组合("dep" 始终是我的 y 因变量),我如何一次获得一个系数或所有系数?谢谢!
作为答案发布,因为它显然有效:
我不确定你从哪里得到代码 dep~paste(x, collapse="*")
,在公式中使用 paste
是行不通的,而且我在页面的任何地方都没有看到你 link。您需要将完整的公式构建为字符串。尝试这样的事情:
formula = as.formula(paste("dep ~", paste(x, collapse = "*")))
下次,请展示您用来调用函数的代码,而不仅仅是函数本身。
如果您只想要 "best" 模型,而不是每个模型,您可能还对 leaps
包感兴趣。 ("Best" 在引号中,因为这通常是一种糟糕的模型选择方式,违反了多重比较等的各种统计假设。请查看 LASSO 以获得更好的方法。)