一次对多组数据运行贝叶斯回归模型。

问题描述 投票:2回答:1

我目前正在努力理解使用JAGS的贝叶斯回归模型。我有一个数据框架,看起来像

#sample data frame
group <- rep(1:3, each = 4)
density <- rnorm(12, 1, 1)
diet <- round(rPareto(12,1,1))
dat <- as.data.frame(cbind(group,density, diet))

我想运行一个贝叶斯回归模型,密度与各组的饮食。一个预测变量是饮食,一个响应变量是密度。我的目标是比较组间的β系数。然而,我在这个问题上很苦恼。我过滤了每个组的数据,分别运行贝叶斯回归模型。这个路径在组数少的时候可行,但在组数多的时候将不是一个实用的方法。

我首先按组过滤数据,缩放数据框,并创建了一个jags想要的列表格式。

dat <- dat %>% filter(group == 1)
scale_dat<-as.data.frame(sapply(dat[,c(1:3)],scale))
dataForJags <- list(den=scale_dat$density, diet=scale_dat$diet, N=length(scale_dat$den))

然后,我指定了模型和先前的信息

model<-"model{
for(i in 1:N){
den[i] ~ dnorm(mu[i], tau)  
# identity
mu[i] <- int + beta1*diet[i] 
}
tau ~ dgamma(0.1,0.1)
int ~ dnorm(0, 0.001)
beta1 ~ dnorm(0, 0.001) 
}"

mod1 <- jags.model(textConnection(model),data= dataForJags,n.chains=2)
samples<-jags.samples(model= mod1,variable.names=c("beta1", "int","mu","tau"),n.iter=100000)

从这里我能够得到一个组的贝塔系数,但是找不到合适的方法来一次运行贝叶斯回归到所有级别的组。有谁知道怎么做吗?

r regression modeling bayesian
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.