【问题标题】:Calling OpenBUGS in R not working在 R 中调用 OpenBUGS 不起作用
【发布时间】:2012-12-15 00:59:09
【问题描述】:

我一直在尝试运行 R 代码来使用 OpenBugs。直到昨天它运行良好,我不知道我做了什么,它开始显示一些错误。然后我决定看看一些简单的例子是否有效。所以我尝试了R2WinBUGS vignettes中的学校示例。

文件schools.txt中的模型是

sink("schools.txt")
cat("
      model {
      for (j in 1:J)
      {
        y[j] ~ dnorm (theta[j], tau.y[j])
        theta[j] ~ dnorm (mu.theta, tau.theta)
        tau.y[j] <- pow(sigma.y[j], -2)
      }
      mu.theta ~ dnorm (0.0, 1.0E-6)
      tau.theta <- pow(sigma.theta, -2)
      sigma.theta ~ dunif (0, 1000)
    }",fill=TRUE)
sink()

运行程序其余部分的代码如下:

    data(schools)
 J <- nrow(schools)
 y <- schools$estimate
 sigma.y <- schools$sd
 data <- list ("J", "y", "sigma.y")

inits <- function()
{ 
  list(theta = rnorm(J, 0, 100), mu.theta = rnorm(1, 0, 100),sigma.theta = runif(1, 0, 100))
}

schools.sim <- bugs(data, inits, model.file = "schools.txt",parameters = c("theta", "mu.theta", "sigma.theta"),n.chains = 3, n.iter = 1000) 

很遗憾,我遇到了和以前一样的错误。

 > schools.sim <- bugs(data, inits, model.file = "schools.txt",parameters = c("theta", "mu.theta", "sigma.theta"),n.chains = 3, n.iter = 1000)
    Error in sd(as.vector(ai)) : unused argument(s) (as.vector(ai))

我也尝试过指定program=c('OpenBugs') 但鉴于 OpenBugs 在路径中,这给了我另一个奇怪的错误

     Error in bugs(data, inits, model.file = "schools.txt", parameters = c("theta",  : 
  unused argument(s) (program = c("OpenBugs"))

编辑

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] abind_1.4-0        rjags_3-9          R2WinBUGS_2.1-18   BRugs_0.8-0        R2OpenBUGS_3.2-2.1
[6] LearnBayes_2.12    coda_0.16-1        lattice_0.20-10   

loaded via a namespace (and not attached):
[1] boot_1.3-7    grid_2.15.2   plyr_1.8      stringr_0.6.2 tools_2.15.2 

traceback() 给...

> traceback()
No traceback available

EDIT-2

  > getAnywhere("sd")
2 differing objects matching ‘sd’ were found
in the following places
  .GlobalEnv
  package:stats
  namespace:stats
Use [] to view one of them` 

我应该如何删除我定义的 .GlobalEnv 中的 sd

EDIT-3

问题解决了。我从工作区中删除了对象sd,一切正常。

【问题讨论】:

  • 您是否尝试过关闭当前的 R 会话并打开一个干净的新会话?确保您不只是重新加载旧会话。
  • 是的,我试过但结果一样!
  • sessionInfo() 的结果? traceback()?
  • 我认为您已经以某种方式定义了 sd 的奇怪版本。 getAnywhere("sd")$where 的结果是什么?它应该"package:stats" "namespace:stats"。如果你做了attach(schools) 我可以看到这会在你的工作空间中创建另一个名为sd 的对象,但这不会引起问题,因为它不是一个函数......
  • 感谢getAnywhere。请参阅 EDIT-2

标签: r winbugs


【解决方案1】:

我认为您以某种方式定义了 sd 的奇怪版本。 getAnywhere("sd")$where 的结果是什么?应该是"package:stats" "namespace:stats"。如果您执行了attach(schools),我可以看到这会在您的工作区中创建另一个名为sd 的对象,但这不会导致问题,因为它不是一个函数。

解决方案:rm(sd)rm("sd")(后者可能更好)

【讨论】:

  • 我在 Rprofile.site 文件中定义了另一个名为 sd 的函数,这就是我收到错误消息的原因。 R 正在使用.Global 中定义的 sd。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多