Loop through (subsets) using jags

老子叫甜甜 提交于 2021-02-11 04:54:13

问题


I have a big dataframe with 10000 rows and 12 columns (discountdataset). The columns contain different variables. The first 210 rows represents subject 1 (there is also a column with "subject1"), the next 210 rows represent subject 2, and so on.

I want to use jags and a loop function to loop through all 52 subjects in the dataframe, and assign a function to each of them. My code looks like this:

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

Here my plan is to loop and assign the following jags function to all subjects in the subset), but, it doesn't work. I think my mistake is that the variables "nt", "Choice" that I want to pass on to jags are not defined right, or, are not updated.

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:


Try:

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 should be a list containing outputs for each of the factors you split main dataset by. Please note that it is quite hard to test this without any provided data. So, if this fails to work, you may want to provide some data for testing.

I hope it helps.



来源:https://stackoverflow.com/questions/39337786/loop-through-subsets-using-jags

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!