【问题标题】:BayesTree package plot extraction in RR中的BayesTree包图提取
【发布时间】:2013-03-24 17:25:54
【问题描述】:

我在 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) 执行时,它会生成两个图“绘图方法将 mfrow 设置为 c(1,2) 并制作两个图。”我希望只使用此命令生成的第二个图。有没有一种简单的方法可以只提取第二个情节?

这也是提供的:

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

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

【问题讨论】:

    标签: r plot bayesian par


    【解决方案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)
    

    【讨论】:

    • 最后一部分实际上对我有用,谢谢!我仍然可以按照我想要的方式在它旁边放置另一个情节。
    • 不客气。我确信有一种更整洁的方法可以做到这一点,但我很高兴这个解决方案对你有用:)
    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多