我在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命令中,您还可以获得多个图。
答案 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)