使用jags循环(子集)

时间:2016-09-05 21:16:31

标签: r loops jags

我有一个包含10000行和12列的大数据帧(discountdataset)。 列包含不同的变量。前210行代表主题1(还有一列" subject1"),接下来的210行代表主题2,依此类推。

我想使用jags和循环函数来遍历数据框中的所有52个主题,并为每个主题分配一个函数。我的代码如下所示:

#subsetting the dataframe by the variable subjectid
subsetdiscount <- split(discountdataset, as.factor(discountdataset$subjectid))

这里我的计划是循环并将以下jags函数分配给子集中的所有主题),但是,它不起作用。我认为我的错误是我想传递给jags的变量"nt", "Choice"没有正确定义,或者没有更新。

library(rjags)

for (i in 1:length(subsetdiscount))
{

nt <- nrow (subsetdiscount)
Choice <- subsetdiscount$choice
amountSS <- subsetdiscount$val_basic
amountLL <- subsetdiscount$val_d
delayDIFF <- subsetdiscount$delay
con <- subsetdiscount$condition


data <- list("nt", "Choice", "amountSS", "amountLL", "delayDIFF", "con") #      to be passed on to JAGS

myinits <- list(
list(k = (c(0.01, 0.01))),
list(temp = (c(6, 6))))


parameters <- c("k", "temp")


samples <- jags(data, inits=myinits, parameters,
             model.file ="singlesubmodel_Ben_roundedchoice.txt", n.chains=2,         n.iter=20000, 
     n.burnin=1, n.thin=1, DIC=T)

1 个答案:

答案 0 :(得分:0)

尝试:

library(rjags)
library(R2jags)

subsetdiscount <- split(discountdataset, as.factor(discountdataset$subjectid))

output_models <- lapply(subsetdiscount, function(x) {
  nt <- nrow(x)
  Choice <- x$choice
  amountSS <- x$val_basic
  amountLL <- x$val_d
  delayDIFF <- x$delay
  con <- x$condition
  data <- list("nt", "Choice", "amountSS", "amountLL", "delayDIFF", "con") #      to be passed on to JAGS
  myinits <- list(list(k = (c(0.01, 0.01))),
    list(temp = (c(6, 6))))
  parameters <- c("k", "temp")
  samples <- jags(data, inits=myinits, parameters,
                  model.file ="singlesubmodel_Ben_roundedchoice.txt", 
                  n.chains=2, n.iter=20000, 
                  n.burnin=1, n.thin=1, DIC=T)
  return(samples)
})

output_models应该是一个列表,其中包含您拆分主数据集的每个因子的输出。 请注意,如果没有任何提供的数据,很难对其进行测试。因此,如果这不起作用,您可能需要提供一些数据进行测试。

我希望它有所帮助。