关于 JAGS for R 中的警告消息
Regarding a warning message in JAGS for R
我在学习贝叶斯时正在试验 rjags
r
包。我使用 rrr
包中的烟草数据集拟合了以下多元模型。
其中 \gamma 是衡量结果之间相关性的随机截距。此外,我故意将响应的某些值设为缺失值,以探索数据结构不平衡的结果。同时,我添加了表示主题id的AID变量。
我使用 rjags
安装了这个模型,如下所示。
library(rrr)
require(dplyr)
library(rjags)
data("tobacco")
tobacco <- as_data_frame(tobacco)
tobacco$AID=seq(1:25)
tobacco[4,1]=NA
tobacco[14,1]=NA
tobacco[8,1]=NA
tobacco[6,2]=NA
tobacco[1,2]=NA
tobacco[19,2]=NA
tobacco[21,2]=NA
N1=length(tobacco$Y1.BurnRate)
bayes_model_mul="model {
for(i in 1:N1){
Y1.BurnRate[i]~dnorm(mu1[i],tau1)
Y2.PercentSugar[i]~dnorm(mu2[i],tau2)
mu1[i]=beta1[1] + beta1[2]*X2.PercentChlorine[i] + beta1[3]*X3.PercentPotassium[i] + gamma[AID[i]]
mu2[i]=beta2[1] + beta2[3]*X2.PercentChlorine[i] + beta2[2]*X1.PercentNitrogen[i]+
beta2[4]*X3.PercentPotassium[i]+gamma[AID[i]]
gamma[i] ~ dmnorm(0,tau_u)
}
for (l in 1:3) { beta1[l] ~dnorm(0, 0.001) }
for (l in 1:4) { beta2[l] ~dnorm(0, 0.001) }
tau1 ~ dgamma(.01,.01)
sigma_tau1 = 1/tau1
tau2 ~ dgamma(.01,.01)
sigma_tau2 = 1/tau2
tau_u ~ dgamma(.01,.01)
sigma_tau_u = 1/tau_u
}"
model3 <- jags.model(textConnection(bayes_model_mul),
data = list(Y1.BurnRate=tobacco$Y1.BurnRate,
Y2.PercentSugar=tobacco$Y2.PercentSugar
,X1.PercentNitrogen=tobacco$X1.PercentNitrogen,
N1=N1,X2.PercentChlorine=tobacco$X2.PercentChlorine,
X3.PercentPotassium=tobacco$X3.PercentPotassium,AID=tobacco$AID),
n.chains=1)
params <- c('beta1','sigma_tau1','sigma_tau2','beta2','sigma_tau_u','gamma')
samps.1 <- coda.samples(model3, params, n.iter = 10000)
burn.in=1000
summary.model.1=summary(window(samps.1, start = burn.in))
我没有收到任何错误。但是我收到以下警告消息。
Warning message:
In FUN(X[[i]], ...) : start value not changed
谁能帮我弄清楚这条错误消息是关于什么的?
谢谢。
window
函数用于 select 一系列样本。它需要 start
和 end
参数。 start
取的值应该大于jags.models
中的n.adapt
和update
中的n.iter
的迭代次数之和,如果明确设置一些老化样本。
你可以看看jags.model
返回的对象,看看迭代次数是如何变化的。
# Define the model
model3 <- jags.model(textConnection(bayes_model_mul), n.adapt=1234,
data = list(Y1.BurnRate=tobacco$Y1.BurnRate,Y2.PercentSugar=tobacco$Y2.PercentSugar,X1.PercentNitrogen=tobacco$X1.PercentNitrogen,N1=N1,X2.PercentChlorine=tobacco$X2.PercentChlorine,X3.PercentPotassium=tobacco$X3.PercentPotassium,AID=tobacco$AID),
n.chains=1)
# Look at the number of iterations (== n.adapt)
model3$iter()
#1234
# Add some burnin iterations: iterations are updated to n.adapt + burnin
update(model3, n.iter=1111)
model3$iter()
# 2345
# Draw more samples -> iterations updated to n.adapt + burnin + n.iter
samps.1 <- coda.samples(model3, n.iter = 10000, variable.names=c('beta1','sigma_tau1','sigma_tau2','beta2','sigma_tau_u','gamma'))
model3$iter()
# 12345
当我们使用 window
时,起始值预计会大于 n.adapt + burnin
,因为这些迭代已被丢弃。如果不是,则从 coda.samples
对象中提取 start
值(参见 mcpar(samps.1[[1]])
)并且不使用您的手动 start
值。
所以使用 w=window(samps.1, start=2345)
会给出您看到的警告
Warning message:
In FUN(X[[i]], ...) : start value not changed
但是以下是可以的,因为 start
大于 n.adapt + burnin
w=window(samps.1, start=2346)
记住这些只是警告,在这种情况下并不那么重要。但是如果你重新运行 coda.samples
而没有重新运行 jags.model
这将再次更新迭代,这使得跟踪要传递给 window
的值有点困难(然后可能会抛出错误)
我在学习贝叶斯时正在试验 rjags
r
包。我使用 rrr
包中的烟草数据集拟合了以下多元模型。
其中 \gamma 是衡量结果之间相关性的随机截距。此外,我故意将响应的某些值设为缺失值,以探索数据结构不平衡的结果。同时,我添加了表示主题id的AID变量。
我使用 rjags
安装了这个模型,如下所示。
library(rrr)
require(dplyr)
library(rjags)
data("tobacco")
tobacco <- as_data_frame(tobacco)
tobacco$AID=seq(1:25)
tobacco[4,1]=NA
tobacco[14,1]=NA
tobacco[8,1]=NA
tobacco[6,2]=NA
tobacco[1,2]=NA
tobacco[19,2]=NA
tobacco[21,2]=NA
N1=length(tobacco$Y1.BurnRate)
bayes_model_mul="model {
for(i in 1:N1){
Y1.BurnRate[i]~dnorm(mu1[i],tau1)
Y2.PercentSugar[i]~dnorm(mu2[i],tau2)
mu1[i]=beta1[1] + beta1[2]*X2.PercentChlorine[i] + beta1[3]*X3.PercentPotassium[i] + gamma[AID[i]]
mu2[i]=beta2[1] + beta2[3]*X2.PercentChlorine[i] + beta2[2]*X1.PercentNitrogen[i]+
beta2[4]*X3.PercentPotassium[i]+gamma[AID[i]]
gamma[i] ~ dmnorm(0,tau_u)
}
for (l in 1:3) { beta1[l] ~dnorm(0, 0.001) }
for (l in 1:4) { beta2[l] ~dnorm(0, 0.001) }
tau1 ~ dgamma(.01,.01)
sigma_tau1 = 1/tau1
tau2 ~ dgamma(.01,.01)
sigma_tau2 = 1/tau2
tau_u ~ dgamma(.01,.01)
sigma_tau_u = 1/tau_u
}"
model3 <- jags.model(textConnection(bayes_model_mul),
data = list(Y1.BurnRate=tobacco$Y1.BurnRate,
Y2.PercentSugar=tobacco$Y2.PercentSugar
,X1.PercentNitrogen=tobacco$X1.PercentNitrogen,
N1=N1,X2.PercentChlorine=tobacco$X2.PercentChlorine,
X3.PercentPotassium=tobacco$X3.PercentPotassium,AID=tobacco$AID),
n.chains=1)
params <- c('beta1','sigma_tau1','sigma_tau2','beta2','sigma_tau_u','gamma')
samps.1 <- coda.samples(model3, params, n.iter = 10000)
burn.in=1000
summary.model.1=summary(window(samps.1, start = burn.in))
我没有收到任何错误。但是我收到以下警告消息。
Warning message:
In FUN(X[[i]], ...) : start value not changed
谁能帮我弄清楚这条错误消息是关于什么的?
谢谢。
window
函数用于 select 一系列样本。它需要 start
和 end
参数。 start
取的值应该大于jags.models
中的n.adapt
和update
中的n.iter
的迭代次数之和,如果明确设置一些老化样本。
你可以看看jags.model
返回的对象,看看迭代次数是如何变化的。
# Define the model
model3 <- jags.model(textConnection(bayes_model_mul), n.adapt=1234,
data = list(Y1.BurnRate=tobacco$Y1.BurnRate,Y2.PercentSugar=tobacco$Y2.PercentSugar,X1.PercentNitrogen=tobacco$X1.PercentNitrogen,N1=N1,X2.PercentChlorine=tobacco$X2.PercentChlorine,X3.PercentPotassium=tobacco$X3.PercentPotassium,AID=tobacco$AID),
n.chains=1)
# Look at the number of iterations (== n.adapt)
model3$iter()
#1234
# Add some burnin iterations: iterations are updated to n.adapt + burnin
update(model3, n.iter=1111)
model3$iter()
# 2345
# Draw more samples -> iterations updated to n.adapt + burnin + n.iter
samps.1 <- coda.samples(model3, n.iter = 10000, variable.names=c('beta1','sigma_tau1','sigma_tau2','beta2','sigma_tau_u','gamma'))
model3$iter()
# 12345
当我们使用 window
时,起始值预计会大于 n.adapt + burnin
,因为这些迭代已被丢弃。如果不是,则从 coda.samples
对象中提取 start
值(参见 mcpar(samps.1[[1]])
)并且不使用您的手动 start
值。
所以使用 w=window(samps.1, start=2345)
会给出您看到的警告
Warning message:
In FUN(X[[i]], ...) : start value not changed
但是以下是可以的,因为 start
大于 n.adapt + burnin
w=window(samps.1, start=2346)
记住这些只是警告,在这种情况下并不那么重要。但是如果你重新运行 coda.samples
而没有重新运行 jags.model
这将再次更新迭代,这使得跟踪要传递给 window
的值有点困难(然后可能会抛出错误)