我有一个变量列表,比如我的数据集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个变量?
请帮忙。
答案 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))