在R中有效地使用Boruta包

时间:2018-03-24 14:40:50

标签: r

我有一个变量列表,比如我的数据集df中的v1,v2,v3,v4 .... v25。我的预测变量是Sales。使用Boruta软件包进行功能选择时,我写道:

Boruta(Sales ~ ., data=na.omit(df), doTrace=2)

如果我想手动删除一个变量,比如我认识的v1没有任何意义,我写道:

Boruta(Sales ~ .-v1, data=na.omit(df), doTrace=2)

如何删除多个变量?像v2​​,v3和v4? 另外,如果我想保留一些用于Boruta检查的变量,可以做些什么,比如20个中的20个变量?

请帮忙。

2 个答案:

答案 0 :(得分:1)

Boruta使用通常的公式'格式,对吗?所以你可以继续链接' - [变量]'尽可能多地打扰你打字,例如lm(mpg~.-cyl-drat,mtcars)

点意味着“所有事情”,所以如果您想要保留更多想要保留的东西,请留下点并添加内容而不是将其取走,例如lm(mpg~cyl+drat,mtcars)

您还可以从字符串创建公式,因此您可以选择让R为您构建公式

vars <- c("cyl","drat")#whatever your process is for getting these
myf <- as.formula(paste0(c("mpg~",vars[1],paste0('+',vars[2:length(vars)])),collapse=""))
lm(formula=myf,mtcars)

虽然使用点可能更容易,只需传递一个只有你想要的cols的数据框(使用dplyr select或类似的)

答案 1 :(得分:0)

我想上面的答案确实非常完整,并且解释了您问题的解决方案。

但根据我的经验,最好将过滤后的 dataframe 传递到 Boruta 中,因为我认为您想滚动 Boruta 的结果?

比如说,如果我要处理 52 个变量并且我想知道哪些变量实际上添加了有关特定类的信息,我会使用 Boruta

再次根据经验,如果无论如何您对 52 个变量中的 20 个都不感兴趣,我不明白您为什么要通过过滤这些冗余变量来制作更小的 dataframe,以便您的代码具有更高的可读性。

如前所述,您可以使用 dplyr 包来选择不打算发送到 Boruta 的变量:

df_filtered <- df %>% select(-c(var1, var2, var3))