r - 通过 R 在 WinBUGS 中设置种子

标签 r winbugs jags r2winbugs

是否可以在 WinBUGS 中设置种子来重现参数估计,就像在 R 中使用 set.seed 所做的那样?

最佳答案

下面的代码建议您通过在每次运行 WinBUGS 模型之前设置种子,通过 R 重现 WinBUGS 中的估计值。

前四个模型运行紧接着相同的 set.seed 语句。最后两个模型运行则不然。根据 all.equal 语句,前四个模型运行返回相同的估计值。最后两个模型运行没有。

####################################################################################
####################################################################################


library(R2WinBUGS)

n <- 15
x <- 1:15
y <- c(32.46, 38.38, 40.92, 22.27, 34.64, 33.53, 26.62, 25.26, 23.67, 20.54, 21.11, 17.00, 16.61, 19.32, 22.29)


print(summary(lm(y ~ x)))


####################################################################################
####################################################################################


set.seed(1234)


sink("linreg.txt")
cat("
model {

# Priors
 alpha ~ dnorm(0,0.001)
 beta  ~ dnorm(0,0.001)
 sigma ~ dunif(0,  100)
 tau <- 1/ (sigma * sigma)

# Likelihood
 for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau) 
    mu[i] <- alpha + beta*x[i]
 }

}
",fill=TRUE)
sink()


win.data <- list("x","y", "n")

inits <- function(){list(alpha=rnorm(1), beta=rnorm(1), sigma = rlnorm(1))}

params <- c("alpha", "beta", "sigma")

nc =    2  
ni = 1000  
nb =  500
nt =    5

out1 <- bugs(data = win.data, inits = inits, parameters = params, 
            model = "linreg.txt", bugs.directory="c:/WinBUGS14/",
            n.thin = nt, n.chains = nc, n.burnin = nb, n.iter = ni)

print(out1, dig = 4)


####################################################################################
####################################################################################


set.seed(1234)


sink("linreg.txt")
cat("
model {

# Priors
 alpha ~ dnorm(0,0.001)
 beta  ~ dnorm(0,0.001)
 sigma ~ dunif(0,  100)
 tau <- 1/ (sigma * sigma)

# Likelihood
 for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau) 
    mu[i] <- alpha + beta*x[i]
 }

}
",fill=TRUE)
sink()


win.data <- list("x","y", "n")

inits <- function(){list(alpha=rnorm(1), beta=rnorm(1), sigma = rlnorm(1))}

params <- c("alpha", "beta", "sigma")

nc =    2  
ni = 1000  
nb =  500
nt =    5

out2 <- bugs(data = win.data, inits = inits, parameters = params, 
            model = "linreg.txt", bugs.directory="c:/WinBUGS14/",
            n.thin = nt, n.chains = nc, n.burnin = nb, n.iter = ni)

print(out2, dig = 4)


####################################################################################
####################################################################################


set.seed(1234)


sink("linreg.txt")
cat("
model {

# Priors
 alpha ~ dnorm(0,0.001)
 beta  ~ dnorm(0,0.001)
 sigma ~ dunif(0,  100)
 tau <- 1/ (sigma * sigma)

# Likelihood
 for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau) 
    mu[i] <- alpha + beta*x[i]
 }

}
",fill=TRUE)
sink()


win.data <- list("x","y", "n")

inits <- function(){list(alpha=rnorm(1), beta=rnorm(1), sigma = rlnorm(1))}

params <- c("alpha", "beta", "sigma")

nc =    2  
ni = 1000  
nb =  500
nt =    5

out3 <- bugs(data = win.data, inits = inits, parameters = params, 
            model = "linreg.txt", bugs.directory="c:/WinBUGS14/",
            n.thin = nt, n.chains = nc, n.burnin = nb, n.iter = ni)

print(out3, dig = 4)


####################################################################################
####################################################################################


set.seed(1234)


sink("linreg.txt")
cat("
model {

# Priors
 alpha ~ dnorm(0,0.001)
 beta  ~ dnorm(0,0.001)
 sigma ~ dunif(0,  100)
 tau <- 1/ (sigma * sigma)

# Likelihood
 for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau) 
    mu[i] <- alpha + beta*x[i]
 }

}
",fill=TRUE)
sink()


win.data <- list("x","y", "n")

inits <- function(){list(alpha=rnorm(1), beta=rnorm(1), sigma = rlnorm(1))}

params <- c("alpha", "beta", "sigma")

nc =    2  
ni = 1000  
nb =  500
nt =    5

out4 <- bugs(data = win.data, inits = inits, parameters = params, 
            model = "linreg.txt", bugs.directory="c:/WinBUGS14/",
            n.thin = nt, n.chains = nc, n.burnin = nb, n.iter = ni)

print(out4, dig = 4)


####################################################################################
####################################################################################


sink("linreg.txt")
cat("
model {

# Priors
 alpha ~ dnorm(0,0.001)
 beta  ~ dnorm(0,0.001)
 sigma ~ dunif(0,  100)
 tau <- 1/ (sigma * sigma)

# Likelihood
 for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau) 
    mu[i] <- alpha + beta*x[i]
 }

}
",fill=TRUE)
sink()


win.data <- list("x","y", "n")

inits <- function(){list(alpha=rnorm(1), beta=rnorm(1), sigma = rlnorm(1))}

params <- c("alpha", "beta", "sigma")

nc =    2  
ni = 1000  
nb =  500
nt =    5

out5 <- bugs(data = win.data, inits = inits, parameters = params, 
            model = "linreg.txt", bugs.directory="c:/WinBUGS14/",
            n.thin = nt, n.chains = nc, n.burnin = nb, n.iter = ni)

print(out5, dig = 4)


####################################################################################
####################################################################################


sink("linreg.txt")
cat("
model {

# Priors
 alpha ~ dnorm(0,0.001)
 beta  ~ dnorm(0,0.001)
 sigma ~ dunif(0,  100)
 tau <- 1/ (sigma * sigma)

# Likelihood
 for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau) 
    mu[i] <- alpha + beta*x[i]
 }

}
",fill=TRUE)
sink()


win.data <- list("x","y", "n")

inits <- function(){list(alpha=rnorm(1), beta=rnorm(1), sigma = rlnorm(1))}

params <- c("alpha", "beta", "sigma")

nc =    2  
ni = 1000  
nb =  500
nt =    5

out6 <- bugs(data = win.data, inits = inits, parameters = params, 
            model = "linreg.txt", bugs.directory="c:/WinBUGS14/",
            n.thin = nt, n.chains = nc, n.burnin = nb, n.iter = ni)

print(out6, dig = 4)

####################################################################################
####################################################################################

all.equal(out1, out2)
all.equal(out1, out3)
all.equal(out1, out4)
all.equal(out1, out5)
all.equal(out1, out6)

关于r - 通过 R 在 WinBUGS 中设置种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29518877/

相关文章:

r - 填充和空心形状,其中填充颜色 = 线条颜色

r - 双百分号 (%%) 是什么意思?

r - 将 data.table/data.frame 与部分匹配的矩阵匹配

winbugs - 在 OpenBUGS 中的多次运行中跟踪具有特定值的模拟时间序列的交点

bayesian - WinBUGS 威 bool 网络元分析

winbugs - 此链包含未初始化的变量

r - 安装包 ‘rjags’ 的退出状态非零

r - 为什么我的 data.frame 列是列表?

r - 抑制 R 中的 JAGS "value out of range"警告

r - JAGS 中的柯西先验