0

我想从一个依赖于其他两个独立因素的所有组合的回归中获得回归系数和拟合统计数据。

我所拥有的是这样的数据(注意NA):

H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE))) 
H[2,3]<-NA
names(H)<-c("dep",letters[1:9])

所以我想在所有这些组合上使用lm.

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 因变量),我如何一次获得一个系数或所有系数?谢谢!

4

1 回答 1

1

发布为答案,因为它显然有效:

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

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

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

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

于 2019-01-04T17:36:07.520 回答