我正在尝试使用R中实现的JAGS将多元模型拟合到物种组成数据中。我有3种相对相对丰度(界于[0,1]之间)的数据,其中两个具有相关性。这是生成相似数据的代码。

#generate some correlated fractional composition data.
y1 <- runif(100,10,200)
y2 <- y1*1.5 + rnorm(100, sd = 5)
y3 <- runif(100,10,200)
total <- y1+y2+y3
y1 <- y1/(total)
y2 <- y2/(total)
y3 <- y3/(total)
y <- data.frame(y1,y2,y3)


y是我的三个因变量y1y2y3的data.frame。我想将仅截距模型拟合到这些数据,考虑使用dirlichet分布(β分布的多元扩展)的因变量之间的协方差。

我有点卡住了。我可以使用R中的runjags包,使用beta分布精细函数,为单个因变量进行编码,如下所示:

library(runjags)

#Write JAGS model, save as R object.
jags.model = "
model{
  # priors
  a0 ~ dnorm(0, .001)
  t0 ~ dnorm(0, .01)
  tau <- exp(t0)

  # likelihood for continuous component - predicted value on interval (0,1)
  for (i in 1:N){
    y[i] ~ dbeta(p[i], q[i])
    p[i] <- mu[i] * tau
    q[i] <- (1 - mu[i]) * tau
    logit(mu[i]) <- a0
  }
}
"

#generate JAGS data as list.
jags.data <- list(y = y1,
                  N = length(y1))

#Fit a JAGS model using run.jags
jags.out <- run.jags(jags.model,
                     data=jags.data,
                     adapt = 1000,
                     burnin = 1000,
                     sample = 2000,
                     n.chains=3,
                     monitor=c('a0'))


穆的问题是:如何使用JAGS中的Dirlichet分布(在R中实现)将其扩展到多变量情况?如果我们可以考虑y矩阵中的协方差,则有好处。

最佳答案

这是JAGS中使用原始问题中提供的伪数据的直接解决方案。

JAGS数据对象:

y <- as.matrix(y)
jags.data <- list(y = y,
                  N = nrow(y),
                  N.spp = ncol(y))


JAGS模型作为R对象jags.model

jags.model = "
model {
    #setup priors for each species
    for(j in 1:N.spp){
      m0[j] ~ dgamma(1.0E-3, 1.0E-3) #intercept prior
    }

    #implement dirlichet
    for(i in 1:N){
    for(j in 1:N.spp){
         log(a0[i,j]) <- m0[j] ## eventually add linear model here
      }
     y[i,1:N.spp] ~ ddirch(a0[i,1:N.spp])
    }

} #close model loop.
"


继续进行模型拟合,监视m0截距参数,该参数是一个向量,即每个物种组的截距。

#Fit a JAGS model using run.jags
jags.out <- run.jags(jags.model,
                     data=jags.data,
                     adapt = 100,
                     burnin = 100,
                     sample = 200,
                     n.chains=3,
                     monitor=c('m0'))

关于r - 在JAGS中为R拟合多元dirlichet模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49077533/

10-10 03:49