R中的BayesTree包绘图提取

时间:2013-03-24 17:25:54

标签: r plot bayesian par

我在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

当执行绘图(bartFit)时,它会生成两个图“绘图方法将mfrow设置为c(1,2)并绘制两个图。”我期待只使用从这个命令产生的第二个图。有没有简单的方法只提取第二个图?

这也是提供的:

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

我对R比较新,一般来说如果一个命令给出超过1个情节你怎么能选择你想要的特定情节?例如,在线性模型(lm)plot命令中,您还可以获得多个图。

1 个答案:

答案 0 :(得分:1)

好的,我没有解决方案,但也许我正在做点什么。首先,我试图计算在第二个图上绘制bartFit中的哪些列表元素。您可以使用str(bartFit)查看bart的结构。似乎第二个图是从$y$yhat.train.mean创建的,看起来似乎正确:

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

但它显然错过了酒吧。所以我决定改变策略并traceback()看看这些图是如何创建的。没有运气,直到我更改了x-scale的名称才强迫错误。

plot(bartFit, xlab="something")

这只给了我第一个情节,错误信息,但也有traceback()的能力。在那里,我可以看到第二个图是使用:

创建的
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。在那里,我发现使用par参数mfg来“强制”仅绘制第二个绘图的非常非常粗糙的解决方案。这仍将留下一个地块的空白空间,但不会绘制它。但它的行为也很奇怪。棘手的。

plot(bartFit)
par(mfg=c(1,2))
plot(bartFit)