2009-10-29 47 views
1

我跑JAGS 我得到了一个巨大的列表(这个例子的结果)。晶格问题:晶格对象来自JAGS,但设备不能设置

每当我访问results$density,两个lattice plots(每个参数一个)弹出默认的石英设备。

我需要结合这些与par(mfrow=c(2, 1))或类似的方法,并将它们发送到pdf device

没有我试过的是工作。有任何想法吗?

我试过dev.print,pdf()dev.off()等没有运气。

回答

2

这里是由网格结构的操纵沟“V1”面板的方式:

p1 <- results$density$c 
p2 <- results$density$m 

p1$layout <- c(1,1) 
p1$index.cond[[1]] <- 1 # remove second index 
p1$condlevels[[1]] <- "c" # remove "V1" 
class(p1) <- "trellis" # overwrite class "plotindpages" 

p2$layout <- c(1,1) 
p2$index.cond[[1]] <- 1 # remove second index 
p2$condlevels[[1]] <- "m" # remove "V1" 
class(p2) <- "trellis" # overwrite class "plotindpages" 

library(grid) 
layout <- grid.layout(2, 1, heights=unit(c(1, 1), c("null", "null"))) 
grid.newpage() 
pushViewport(viewport(layout=layout)) 
pushViewport(viewport(layout.pos.row=1)) 
print(p1, newpage=FALSE) 
popViewport() 
pushViewport(viewport(layout.pos.row=2)) 
print(p2, newpage=FALSE) 
popViewport() 
popViewport() 

pot of c.trellis() result http://img142.imageshack.us/img142/3272/ctrellisa.png

1

例如,对于从run.jags所包含例如,使用

sink("results_str.txt") 
str(results$density) 
sink() 

然后你会看到一个名为布局组件检查列表的结构。每个变量的两个曲线图的布局可以用

results$density$m$layout <- c(1,2) 
print(results$density$m) 

不同的参数的曲线可以使用从latticeExtrac.trellis方法组合进行设置。

class(results$density$m) <- "trellis" # overwrite class "plotindpages" 
class(results$density$c) <- "trellis" # overwrite class "plotindpages" 
library("latticeExtra") 
update(c(results$density$m, results$density$c), layout=c(2,2)) 

output of c.trellis http://img88.imageshack.us/img88/6481/ctrellis.png

另一种方法是使用grid视:

library("grid") 
results$density$m$layout <- c(2,1) 
results$density$c$layout <- c(2,1) 
class(results$density$m) <- "trellis" 
class(results$density$c) <- "trellis" 
layout <- grid.layout(2, 1, heights=unit(c(1, 1), c("null", "null"))) 
grid.newpage() 
pushViewport(viewport(layout=layout)) 
pushViewport(viewport(layout.pos.row=1)) 
print(results$density$m, newpage=FALSE) 
popViewport() 
pushViewport(viewport(layout.pos.row=2)) 
print(results$density$c, newpage=FALSE) 
popViewport() 
popViewport() 

grid output http://img88.imageshack.us/img88/5967/grida.png

+0

这工作 - 但我不希望V1和V2图 - 它们是多余的。我怎样才能摆脱这些? – Vince 2009-10-30 03:31:56

1

的情节相结合的最简单方法是使用存储在结果$ MCMC结果:

# prepare data, see source code of "run.jags" 
thinned.mcmc <- combine.mcmc(list(results$mcmc), 
          collapse.chains=FALSE, 
          return.samples=1000) 
print(densityplot(thinned.mcmc[,c(1,2)], layout=c(1,2), 
        ylab="Density", xlab="Value")) 
+0

干净有效!谢谢。我仍然很好奇(对于一般的格子知识),如何在你的另一个例子中抛弃这些V1和V2图。 – Vince 2009-10-30 22:53:40