在R中定义for循环中的模型

  • 本文关键字:模型 循环 定义 for r
  • 更新时间 :
  • 英文 :


我已经检查了有关定义R中的模型的问题所有其他变量都是该迭代的预测变量。

df <- data.frame(customer = c(1:5), product1 = c(1,0,1,1,0), product2 = c(0,1,0,0,1), product3 = c(0,1,1,1,0))
customer product1 product2 product3
1        1        1        0        0
2        2        0        1        1
3        3        1        0        1
4        4        1        0        1
5        5        0        1        0

因此,在这种情况下,我想创建一个带有3次迭代的for循环:

mdl <- product1 ~ product2 + product3
mdl <- product2 ~ product1 + product3
mdl <- product3 ~ product1 + product2

在这里澄清我的问题,我尝试为循环创建这个问题:

  for(j in 1:ncol(df)){
    mdl <- df$[j] ~ df[-j] # include all variables except target variable
    print(mdl)
  }

在这里我返回的输出:

df[j] ~ df[-j]
df[j] ~ df[-j]
df[j] ~ df[-j]
df[j] ~ df[-j]

虽然我期望的是所需的输出:

product1 ~ product2 + product3
product2 ~ product1 + product3
product3 ~ product1 + product2

如果您想知道为什么我想知道这一点。我想在此示例中像以下示例一样使用它来运行预测模型的循环:

naiveBayes(mdl, df, type = "raw")

我希望我的问题清楚,希望有人能帮助我。

使用setdifflapply您可以实现公式组合。

varNames = colnames(DF)[-1]

lapply(varNames, function(x) paste0( x ,"~", paste0(setdiff(varNames,x),collapse="+" ) ) )
#[[1]]
#[1] "product1~product2+product3"
#
#[[2]]
#[1] "product2~product1+product3"
#
#[[3]]
#[1] "product3~product1+product2"

要将它们纳入您的模型,您可以做:

modelList = lapply(varNames,function(x) {
depVar = x
indepVar = setdiff(varNames,x)
formulaVar = as.formula(paste0( depVar ,"~", paste0(indepVar,collapse="+" ) ))
nbModel = naiveBayes(formulaVar, df, type = "raw")
outputList = list( indepVar = paste0(indepVar,collapse=","),depVar = depVar,nbModel = nbModel)
return(outputList)
})

这将返回包含因var,独立var和naive贝叶斯模型的列表对象。

要访问其中的任何人,您可以modelList[[1]]length(modelList)给出了此列表中的模型数。

有关生成组合的替代方法,请参见?combn?expand.grid

combn(varNames,2)
#     [,1]       [,2]       [,3]      
#[1,] "product1" "product1" "product2"
#[2,] "product2" "product3" "product3"
head(expand.grid(varNames,varNames,varNames))
#      Var1     Var2     Var3
#1 product1 product1 product1
#2 product2 product1 product1
#3 product3 product1 product1
#4 product1 product2 product1
#5 product2 product2 product1
#6 product3 product2 product1

最新更新