rjags方差分析,每组具有独立的方差

时间:2020-09-17 22:41:07

标签: r anova variance rjags

我正在尝试使用Rjags对三个组中的每个组分别进行方差分析。我正在使用R中内置的“ PlantGrowth”数据。

这是模型:

mod_string = " model {
for (i in 1:length(y)) {
y[i] ~ dnorm(mu[grp[i]], sig[grp[i]])
}

for (j in 1:3) {
mu[j] ~ dnorm(0.0, 1.0/1.0e6)
}

for (j in 1:3) {
sig[j] ~ dnorm(0.0, 1.0/1.0e6)
}

} "

set.seed(82)
str(PlantGrowth)
data_jags = list(y=PlantGrowth$weight, 
                 grp=as.numeric(PlantGrowth$group))

params = c("mu", "sig")

inits = function() {
  inits = list("mu"=rnorm(3,0.0,100.0), "sig"=rnorm(3,0.0,1.0))
}

此模型中的inits函数不起作用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我建议采用下一种方法。首先,需要训练贝叶斯模型。所以您的步骤很好。考虑到您正在定义系数的极低先验值。因此,当您将初始值设置得太高时,可能会出现与链中收敛有关的问题。模型链很好。我只是稍微改善了初始值功能。这里的代码。为了完成方差分析,您必须对您感兴趣的参数的所有结果进行处理。这意味着计算后可信区间等。这样,您的主要输入将是来自链的参数。这里是获取所需参数的代码:

library(rjags)
set.seed(82)
#Model string
mod_string = " model {
for (i in 1:length(y)) {
y[i] ~ dnorm(mu[grp[i]], sig[grp[i]])
}

for (j in 1:3) {
mu[j] ~ dnorm(0.0, 1.0/1.0e6)
}

for (j in 1:3) {
sig[j] ~ dnorm(0.0, 1.0/1.0e6)
}

} "
#Data
data(PlantGrowth)
#Jags inputs
data_jags = list(y=PlantGrowth$weight, 
                 grp=as.numeric(PlantGrowth$group))
params = c("mu", "sig")
#Initial values
inits = function() {
  inits = list("mu"=runif(3,0,1), "sig"=runif(3,0,1))
}
#Train the model
#jags model
results.model <- jags.model(file=textConnection(mod_string),
                              data=data_jags, inits=inits(),
                              n.chains=3,quiet = T)
#Update
update(results.model, n.iter=10000,progress.bar = 'none')
#Sampling
results.model.1 <- coda.samples(results.model,
                                 variable.names=params,n.iter=10000,
                                 progress.bar = 'none')
#Extract a sample
d1 <- as.data.frame(do.call(rbind,results.model.1))

输出将存储在d1上。这里有几行:

head(d1)
     mu[1]    mu[2]    mu[3]   sig[1]   sig[2]   sig[3]
1 5.121681 4.725264 5.601421 3.625515 3.096606 9.499369
2 5.399050 4.746094 5.551337 1.260319 3.055592 7.548953
3 4.904069 4.816449 5.655899 1.414513 2.555520 4.303972
4 4.538518 4.730499 5.481598 1.297098 1.597760 5.643879
5 4.908547 4.339875 5.452959 3.710132 1.062263 5.865650
6 5.250289 4.845275 5.554499 2.238207 2.382826 6.492258

使用该值,您必须计算后均值和后可信区间,以便与ANOVA方法形成对比。

相关问题