R如何使用集合中的所有协变量组合自动化回归?

R如何使用集合中的所有协变量组合自动化回归?,r,data-mining,bigdata,regression,R,Data Mining,Bigdata,Regression,假设我们有一个结果变量y和5个协变量的数据集。假设我们想要拟合一个回归模型,其中y在每个可能的协变量组合上回归。既然我们有5个协变量,我们就有5个!=120回归方程。我一直在尝试编写一个解决方案,通过reformate()和update()实现自动化: match_variables以下是我先前评论的详细版本: match_variables <- c("x1", "x2","x3", "x4", "x5") combos <- sapply( seq(5), function(i)

假设我们有一个结果变量y和5个协变量的数据集。假设我们想要拟合一个回归模型,其中y在每个可能的协变量组合上回归。既然我们有5个协变量,我们就有5个!=120回归方程。我一直在尝试编写一个解决方案,通过
reformate()
update()
实现自动化:


match_variables以下是我先前评论的详细版本:

match_variables <- c("x1", "x2","x3", "x4", "x5")
combos <- sapply( seq(5), function(i) {
  as.list(as.data.frame(combn( x=match_variables, m=i ) ) )
})
combos <- unlist(combos,recursive=FALSE)
forms <- sapply( combos, function(x) as.formula(paste0("y~",paste(x,collapse="+")) ))
> forms[[2]]
y ~ x2
<environment: 0x5c64a58>

match_variables一个基于@Ari建议的远非完美的解决方案:

require(combinat)
require(roxygen)
match_variables <- c("x1", "x2","x3", "x4", "x5") 
combos <- sapply( seq(5), Curry( combn, x=match_variables ) )

x <- list("y~x1+x2+x3+x4+x5")

for(i in 1:ncol(combos[[1]])) {  
  x <- append(x, paste("y",paste(combos[[1]][,i]), sep = "~"))
}

for(i in 1:ncol(combos[[2]])) {
  x <- append(x, paste("y",paste(combos[[2]][1,i],combos[[2]][2,i],sep="+"),sep = "~"))
}

for(i in 1:ncol(combos[[3]])) {  
  x <- append(x, paste("y",paste(combos[[3]][1,i],combos[[3]][2,i],combos[[3]][3,i],sep="+"),sep="~"))
}

for(i in 1:ncol(combos[[4]])) {  
  x <- append(x,paste("y",paste(combos[[4]][1,i],combos[[4]][2,i],combos[[4]][3,i],combos[[4]][4,i],sep="+"),sep="~"))  
}
require(合并)
要求(罗克赛根)

匹配变量有一个R函数可以做到这一点,它是通过AIC对模型进行排序的。但不幸的是,我现在找不到它!请让我知道。这个想法可以应用于许多软件包。例如,使用
combn
()获取索引,选择使用这些索引的名称,然后使用
paste
as.formula
构建公式。记住,还应该测试交互。这并不容易。我认为在某些软件包中有一些功能,不需要重新发明轮子。只要找到它:)@Tomas,我想你正在从
MuMIn
软件包中寻找
druge
功能……很好!知道是什么让“东西”留在那里了吗?@hubert_farnsworth我相信这只是R表示每个公式都是在特定环境中创建的。因此,如果它引用
x
,它将(首先?)查看创建环境,然后再向上移动到全局环境链或介于两者之间的任何环境。干得好@hubert_farnsworth。请允许我建议在最后使用
sapply(unlist(x),as.formula)
将它们全部转换为公式。另外,我想你打电话给罗克西根是为了咖喱饭吧?在最新版本中,它已移动到
功能
包中。
require(combinat)
require(roxygen)
match_variables <- c("x1", "x2","x3", "x4", "x5") 
combos <- sapply( seq(5), Curry( combn, x=match_variables ) )

x <- list("y~x1+x2+x3+x4+x5")

for(i in 1:ncol(combos[[1]])) {  
  x <- append(x, paste("y",paste(combos[[1]][,i]), sep = "~"))
}

for(i in 1:ncol(combos[[2]])) {
  x <- append(x, paste("y",paste(combos[[2]][1,i],combos[[2]][2,i],sep="+"),sep = "~"))
}

for(i in 1:ncol(combos[[3]])) {  
  x <- append(x, paste("y",paste(combos[[3]][1,i],combos[[3]][2,i],combos[[3]][3,i],sep="+"),sep="~"))
}

for(i in 1:ncol(combos[[4]])) {  
  x <- append(x,paste("y",paste(combos[[4]][1,i],combos[[4]][2,i],combos[[4]][3,i],combos[[4]][4,i],sep="+"),sep="~"))  
}