2

RでBayesTreeパッケージを使用しています。作成者の例を使用します。

##simulate data (example from Friedman MARS paper)
f = function(x){
10*sin(pi*x[,1]*x[,2]) + 20*(x[,3]-.5)^2+10*x[,4]+5*x[,5]
}
sigma = 1.0 #y = f(x) + sigma*z , z~N(0,1)
n = 100 #number of observations
set.seed(99)
x=matrix(runif(n*10),n,10) #10 variables, only first 5 matter
Ey = f(x)
y=Ey+sigma*rnorm(n)

##run BART
set.seed(99)
bartFit = bart(x,y)
plot(bartFit) # plot bart fit

plot(bartFit)を実行すると、2つのプロットが生成されます。「plotメソッドはmfrowをc(1,2)に設定し、2つのプロットを作成します。」このコマンドから生成された2番目のプロットのみを使用することを検討しています。2番目のプロットのみを抽出する簡単な方法はありますか?

これも提供されます:

## S3 method for class 'bart':
plot((
   x,
   plquants=c(.05,.95), cols =c('blue','black'),
   ...))

私はRに比較的慣れていません。一般に、コマンドで1つ以上のプロットが得られる場合、どのようにして特定のプロットを選択できますか?たとえば、線形モデル(lm)プロットコマンドでは、複数のプロットも取得します。

4

1 に答える 1

1

わかりました、私には解決策がありませんが、多分私は何かに取り組んでいます。最初に、どのリスト要素bartFitが2番目のプロットにプロットされているかを把握しようとしました。を使用してバートの構造を見ることができますstr(bartFit)。2番目のプロットはとから作成されて$yいる$yhat.train.meanようです。これを見ると正しいようです。

plot(bartFit$yhat.train.mean ~ bartFit$y)

しかし、それは明らかにバーが欠けています。そこで、戦略を変更して、traceback()それらのプロットがどのように作成されるかを確認することにしました。エラーを強制するためにx-scaleの名前を変更するまで、運がありません。

plot(bartFit, xlab="something")

それは私に最初のプロット、エラーメッセージだけでなく、する能力も与えましたtraceback()。そこで、2番目のプロットが以下を使用して作成されていることがわかりました。

4: plot.default(x$y, qm, ylim = range(ql, qu), xlab = "y", ylab = "posterior interval for E(Y|x)", ...)
3: plot(x$y, qm, ylim = range(ql, qu), xlab = "y", ylab = "posterior interval for E(Y|x)", ...)

しかし、それは良くありません。何がqm、どこylimから範囲が来るのかわかりません。だから私はで遊び始めましたpar。そこで私は、2番目のプロットのみを「強制」プロットするためのpar引数を使用する非常に大雑把な解決策を発見しました。mfgこれにより、1つのプロットに空のスペースが残りますが、プロットされません。しかし、それも奇妙な振る舞いをします。トリッキーなもの。

plot(bartFit)
par(mfg=c(1,2))
plot(bartFit)
于 2013-03-24T19:11:08.203 に答える