Borutaパッケージで変数を選択しています。ボルタは標準グラフシリーズを1つのグラフに表示しますが、これは便利ですが、プレゼンターが多すぎるという事実を考えると、ボルタプロットに現れるボックスプロットの数を制限できることを望んでいる。次の画像のようなもの。Borutaボックスプロットin R
Basicaclyは、私はプロットの右端の「ズーム」にしたいが、どのように行うには考えていることborutaプロットオブジェクトと。
おかげで、
MR
Borutaパッケージで変数を選択しています。ボルタは標準グラフシリーズを1つのグラフに表示しますが、これは便利ですが、プレゼンターが多すぎるという事実を考えると、ボルタプロットに現れるボックスプロットの数を制限できることを望んでいる。次の画像のようなもの。Borutaボックスプロットin R
Basicaclyは、私はプロットの右端の「ズーム」にしたいが、どのように行うには考えていることborutaプロットオブジェクトと。
おかげで、
MR
は、簡単な質問のように聞こえるが、解決策は驚くほど複雑なようです。おそらく誰かが速く/よりエレガントな方法...ここ
を思い付くことができ、私はソース機能plot.Boruta
に基づいて新しい関数を作成し、私たちは「変数/予測変数の名前を取る関数の引数pars
を追加しますプロットに含めるのが好きです。
例として、iris
データセットを使用してモデルに適合させます。
# Fit model to the iris dataset
library(Boruta);
fit <- Boruta(Species ~ ., data = iris, doTrace = 2);
機能generateCol
は内部plot.Boruta
によって呼び出されますが、パッケージの外にエクスポートされないため、使用できません。しかし、私たちは修正されたplot.Boruta
ルーティンの機能を必要としています。
# generateCol is needed by plot.Boruta
generateCol<-function(x,colCode,col,numShadow){
#Checking arguments
if(is.null(col) & length(colCode)!=4)
stop('colCode should have 4 elements.');
#Generating col
if(is.null(col)){
rep(colCode[4],length(x$finalDecision)+numShadow)->cc;
cc[c(x$finalDecision=='Confirmed',rep(FALSE,numShadow))]<-colCode[1];
cc[c(x$finalDecision=='Tentative',rep(FALSE,numShadow))]<-colCode[2];
cc[c(x$finalDecision=='Rejected',rep(FALSE,numShadow))]<-colCode[3];
col=cc;
}
return(col);
}
現在plot.Boruta
を変更して、私たちは、変数の私たちのリストをフィルタリングしていることにより、関数のパラメータpars
を、追加します。
# Modified plot.Boruta
plot.Boruta.sel <- function(
x,
pars = NULL,
colCode = c('green','yellow','red','blue'),
sort = TRUE,
whichShadow = c(TRUE, TRUE, TRUE),
col = NULL, xlab = 'Attributes', ylab = 'Importance', ...) {
#Checking arguments
if(class(x)!='Boruta')
stop('This function needs Boruta object as an argument.');
if(is.null(x$ImpHistory))
stop('Importance history was not stored during the Boruta run.');
#Removal of -Infs and conversion to a list
lz <- lapply(1:ncol(x$ImpHistory), function(i)
x$ImpHistory[is.finite(x$ImpHistory[,i]),i]);
colnames(x$ImpHistory)->names(lz);
#Selection of shadow meta-attributes
numShadow <- sum(whichShadow);
lz <- lz[c(rep(TRUE,length(x$finalDecision)), whichShadow)];
#Generating color vector
col <- generateCol(x, colCode, col, numShadow);
#Ordering boxes due to attribute median importance
if (sort) {
ii <- order(sapply(lz, stats::median));
lz <- lz[ii];
col <- col[ii];
}
# Select parameters of interest
if (!is.null(pars)) lz <- lz[names(lz) %in% pars];
#Final plotting
graphics::boxplot(lz, xlab = xlab, ylab = ylab, col = col, ...);
invisible(x);
}
は、今、私たちが行う必要があるすべてではなく
plot
の
plot.Boruta.sel
を呼び出し、そして我々は含めたい変数を指定しています。
plot.Boruta.sel(fit, pars = c("Sepal.Length", "Sepal.Width"));
うわー。どうもありがとう。この答えにはかなりの努力が払われました。ほんとうにありがとう。同じ質問をした他の人たちが将来的に恩恵を受けることを願っています。再び多くのありがとう。 –
@MarioReyesの心配はありません。喜んで助けてください。 –