0

R2OpenBUGSを使用してOpenBUGS322をRで実行するための基本的な質問があります。

複数の試用スクリプトを実行すると(以下の1つの例を参照)、エラーが発生します

matrix(、n.sims、n.parameters)のエラー:無効な「nrow」値(大きすぎるかNA)

検索の結果、他の人がOpenBUGS322でこれを経験し、OpenBUGS321が正常に機能するはずであることがわかりました。しかし、誰かが古いバージョンをどこで見つけることができるかアドバイスできますか?OpenBUGS321setup.exeが必要ですが、どこにも見つかりません。

(dbus configなどの他のいくつかの問題を修正しました。XQuartzからプロンプトが表示されると、OpenBUGSが開きます)

私が正しい道を進んでいるかどうかを知るための詳細はこちらです。

私はバージョンを実行しています:Mac OS X 10.5.8 Wine 1.4.1 XQuartz 2.6.3 OpenBUGS322

WINEとOpenBUGSのパスが追加されたWinBUGS教科書のトライアルコード(正しいかどうかは100%わかりません)

助けてくれてありがとう。

脚本:

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)
4

1 に答える 1

1

代わりに使えrjagsますか?構文はほぼ同じです。

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))))

次に、次の方法で分散に変換できます。

SDsample^2

OpenBUGS321setup.exe を探している場合は、ここで見つけることができるはずです。WINE で十分にテストされていないことに注意してください。Linuxエミュレーターは可能ですか?

于 2013-02-02T02:25:21.187 に答える