首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenBUGS322到R的通信

OpenBUGS322到R的通信
EN

Stack Overflow用户
提问于 2013-01-31 10:52:30
回答 1查看 249关注 0票数 0

我有一个关于尝试使用R2OpenBUGS使OpenBUGS322与R一起运行的基本问题。

在运行多个试用脚本时(参见下面的一个示例),我得到一个错误

矩阵(,n.sims,n.parameters)中出错:无效的'nrow‘值(太大或NA)

通过搜索,我发现其他人在使用OpenBUGS322时遇到了这种情况,OpenBUGS321应该可以正常工作。但是,有没有人可以建议我在哪里可以找到旧版本。我需要OpenBUGS321setup.exe,但是到处都找不到它。

(我已经修复了其他几个问题,比如dbus配置,当XQuartz提示时,OpenBUGS现在就会打开)

这里有更多的信息,看看我是否在正确的道路上。

我运行的版本是: Mac 10.5.8 Wine 1.4.1 XQuartz 2.6.3 OpenBUGS322

WinBUGS教科书中添加了WINE和OpenBUGS路径的试用代码(不是100%确定是否正确)

非常感谢你的帮助。

脚本:

代码语言:javascript
复制
y10<-rnorm(n=10, mean=600, sd=30)
y1000<-rnorm(n=1000, mean=600, sd=30)
summary(lm(y1000~1))
library(R2OpenBUGS)

#setwd("/Users/Pavel/wine/ProgramFiles/OpenBUGS322")
setwd("/Users/Pavel/Documents/R/OpenBUGS")
sink("model.txt")
 cat("
model{
population.mean~dunif(0,5000)
precision<-1/population.variance
population.variance<-population.sd* population.sd
 population.sd~dunif(0,100)
for(i in 1:nobs){
 mass[i]~dnorm(population.mean, precision)
}
}
", fill=TRUE)
 sink()

WINE="/opt/local/bin/wine"
WINEPATH="/opt/local/bin/winepath"
OpenBUGS.pgm="/Users/Pavel/wine/ProgramFiles/OpenBUGS322/OpenBUGS.exe"

#Package the data to be handed to OpenBUGS
win.data<-list(mass=y1000, nobs=length(y1000))

#Function to generate starting values
inits<-function()
list(population.mean=rnorm(1,600), population.sd=runif(1,1,30))

#Parameters to be monitored
params<-c("population.mean", "population.sd", "population.variance")

#MCMC settings
nc<-3     #Number of chains
ni<-1000  #Number of draws for each chain
nb<-1     #number of draws to discard as burn -in
nt<-1     #Thinning rate

out<-bugs(data=win.data, inits=inits, parameters.to.save=params, model.file="model.txt",    n.thin=nt, n.chains=nc, n.burnin=nb, n.iter=ni, OpenBUGS.pgm=OpenBUGS.pgm, WINE=WINE,     WINEPATH=WINEPATH,useWINE=T)
EN

回答 1

Stack Overflow用户

发布于 2013-02-02 10:25:21

你能用rjags代替吗?语法几乎相同:

代码语言:javascript
复制
require(rjags)

modelstring <- "
    model {
        for(i in 1:nobs){
            mass[i] ~ dnorm(m, prec) # precision
        }
        m ~ dunif(0, 5000)
        prec <- 1/sqrt(SD) # convert to Std Deviation
        SD ~ dunif(0, 100)
    }
"
writeLines(modelstring,con="model.txt")

y1000 <- stats::rnorm(n=1000, mean=600, sd=30)

dataList <- list(
    mass = y1000,
    nobs = length(y1000)
    )

initsList <-  list(
    m = stats::rnorm(n=1, mean=600, sd=1),
    SD = stats::runif(n=1, min=1, max=30)
    )

parameters <- c("m","SD") # to be monitored.
adaptSteps <- 100         #  "tune" the samplers.
burnInSteps <- 100        #  "burn-in" the samplers.
nChains <- 3              # Number of chains to run.
numSavedSteps <-2000      # Total number of steps in chains to save.
thinSteps <- 1            # Number of steps to "thin" (1=keep every step).
nPerChain <- ceiling(( numSavedSteps * thinSteps ) / nChains) # Steps per chain

jagsModel <- rjags::jags.model(
    "model.txt", data=dataList,
    inits=initsList, n.chains=nChains,
    n.adapt=adaptSteps)

stats::update(jagsModel, n.iter=burnInSteps)

MCMC1 <- as.matrix(rjags::coda.samples(
    jagsModel, variable.names=parameters,
    n.iter=nPerChain, thin=thinSteps))

SDsample <- matrix(MCMC1[,grep("SD",colnames(MCMC1))],
                ncol=length(grep("SD",colnames(MCMC1))))

然后,您可以使用以下命令转换为方差:

代码语言:javascript
复制
SDsample^2

如果你正在寻找OpenBUGS321setup.exe,你应该能够找到它here。我注意到它还没有在葡萄酒中得到很好的测试。Linux仿真器是可能的吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14617691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档