r - 自动为所有可能的线性模型创建公式

标签 r

假设我在数据框中有一个训练集 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/

相关文章:

r - 如何使用 Quantmod 查询 Yahoo 是否存在股票代码

r - 仅 append 不是 "TRUE"的列表元素

r - 根据计算在数据框中插入行

r - R中的多个工作目录

r - 如何在 dplyr 管道中通过 .以编程方式?

c++ - 最小二乘的 SparseQR

c++ - 无法使用 dyn.load windows 7 64bit 在 R 中加载 dll 文件

r - 尝试在 r 中编写一个函数来计算变量并分配级别和标签

r - 将for循环值存储在R中的变量中

javascript - Shiny.onInputChange 不是函数