如何使用combin进行多元回归(或替代)?

时间:2019-01-04 16:47:32

标签: r linear-regression lm combn

我想从两个其他独立因子的所有组合的一个因变量中获得回归系数和拟合统计量。

我拥有的是这样的数据(请注意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。

某人already showed如何使用combn几乎完全相同。但是当我尝试使用glance而不是coefs

对此进行修改时
  fun <- function(x) glance(lm(dep~paste(x, collapse="*"), data=H))[[1]][1]
combn(names(H[2:10]), 2, fun)

我得到一个错误。我以为也许我需要尝试“重复” 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因变量),我如何一次获得一个系数或全部获得一个系数?谢谢!

1 个答案:

答案 0 :(得分:1)

发布作为答案,因为它显然起作用了:

我不确定您在哪里获得代码dep~paste(x, collapse="*"),在公式中使用paste还是行不通的,而且在您链接的页面上的任何地方都看不到这样做。您需要将完整的公式构建为字符串。尝试这样的事情:

formula = as.formula(paste("dep ~", paste(x, collapse = "*")))

下次,请显示用于调用该函数的代码,而不仅仅是函数本身。

如果您只想要“最佳”模型,而不是每个模型,您可能也对leaps包感兴趣。 (用引号括起来的“最佳”是因为这通常是一种糟糕的模型选择方式,违反了多种统计假设进行多重比较之类的方法。请查看LASSO以获得更好的方法。)