假设我在数据框中有一个训练集 train
带列 ColA
, ColB
, ColC
等。这些列之一指定二进制类,例如列 Class
,带有"is"或“否”值。
我正在尝试一些二进制分类器,例如:
library(klaR)
mynb <- NaiveBayes(Class ~ ColA + ColB + ColC, train)
我想循环运行上面的代码,自动生成公式中所有可能的列组合,即:
mynb <- append(mynb, NaiveBayes(Class ~ ColA, train)
mynb <- append(mynb, NaiveBayes(Class ~ ColA + ColB, train)
mynb <- append(mynb, NaiveBayes(Class ~ ColA + ColB + ColC, train)
...
mynb <- append(mynb, NaiveBayes(Class ~ ColB + ColC + ColD, train)
...
如何为涉及数据框列的每个可能的线性模型自动生成公式?
最佳答案
假设我们使用这个荒谬的例子:
DF <- data.frame(Class=1:10,A=1:10,B=1:10,C=1:10)
然后你得到列的名称
Cols <- names(DF)
Cols <- Cols[! Cols %in% "Class"]
n <- length(Cols)
您构建所有可能的组合
id <- unlist(
lapply(1:n,
function(i)combn(1:n,i,simplify=FALSE)
)
,recursive=FALSE)
您将它们粘贴到公式中
Formulas <- sapply(id,function(i)
paste("Class~",paste(Cols[i],collapse="+"))
)
然后你循环它们以应用模型。
lapply(Formulas,function(i)
lm(as.formula(i),data=DF))
但请注意:如果您有多个列,这将很快对内存变得非常沉重,并导致数以千计的模型。您有 2^n - 1 个不同的模型,其中 n 是列数。
确保这是您想要的,通常强烈建议不要进行这种模型比较。当你这样做时,也要忘记任何类型的推理。
关于r - 自动为所有可能的线性模型创建公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300595/