JAGS:节点与父节点不一致

JAGS:节点与父节点不一致,jags,Jags,我试图应用Benedict Escoto在《方差》杂志上发表的论文《混合分布的贝叶斯索赔严重性》中的方法。我似乎遇到了一个JAGS模拟问题。当我运行代码时,JAGS给出以下错误: 节点一[1]节点中的错误与父节点不一致 数据是双重的。首先,有一份详细的保险索赔清单。提供了关于他们的年龄(以年为单位)、免赔额(截断)以及他们是否被限制(审查,对还是错)的信息。其次,对于混合指数分布,有一个先验均值和相应概率权重的列表 我注意到的一点是,它适用于混合指数分布的一组先验数据,但不适用于另一组 它与:

我试图应用Benedict Escoto在《方差》杂志上发表的论文《混合分布的贝叶斯索赔严重性》中的方法。我似乎遇到了一个JAGS模拟问题。当我运行代码时,JAGS给出以下错误:

节点一[1]节点中的错误与父节点不一致

数据是双重的。首先,有一份详细的保险索赔清单。提供了关于他们的年龄(以年为单位)、免赔额(截断)以及他们是否被限制(审查,对还是错)的信息。其次,对于混合指数分布,有一个先验均值和相应概率权重的列表

我注意到的一点是,它适用于混合指数分布的一组先验数据,但不适用于另一组

它与:

平均重量 50 0.3 100 0.25 500 0.25 1500 0.1 5000 0.07 20000 0.03

但它在以下方面失败了:

平均重量 3 0.72 14 0.19 42 0.05 138 0.02 503 0.01 15010.01

因此,它可能与混合指数的参数要求有关

JAGS的数据包组装如下

jags.data <- list(claims=(claim.df$x[!claim.df$capped]
                      - claim.df$truncation[!claim.df$capped]),
              capped.claims=(claim.df$x[claim.df$capped]
                      - claim.df$truncation[claim.df$capped]),
              alpha=alpha,
              means=actual.means,
              ones=rep(1, length(claim.df$[claim.df$capped])),                                                                                                                                  
              ages=claim.df$age[!claim.df$capped],
              capped.ages=claim.df$age[claim.df$capped],
              trend.shape=trend.shape,
              trend.rate=1/trend.scale)

jags.data该模型很难理解,因为您没有告诉我们哪些变量是数据,哪些变量是参数,以及数据是如何构造的(或者您只想从熟悉该特定文章的人那里得到答案)。您是否尝试过让JAG自己初始化链,也就是说,忽略显式参数初始化?Kruschke先生,谢谢您的回答。我目前正在学习你们的教科书,做贝叶斯数据分析,在这个主题上,它非常有帮助。我编辑了我的问题,以包含更多的数据、初始值和运行代码。我尝试让JAG初始化对象“one”,而不是指定1值,但结果链没有收敛。埃斯科托先生接着指出,随机初始化这些数据将类似于编造随机索赔数据,并可能解释这种差异。我很欣赏你的评论。我的意思是注释<代码> ins= jAgs.init,< /Cord>在我有时间的时候必须考虑其他细节……这个错误可能发生,因为<代码> PROB.Cop[ 1 ] < /C> >的值几乎等于零(对于计算机来说,精确为零)。因此,当试图考虑值1已经从伯努利(P=0)中获得时,模型崩溃。为了解决这个问题,通常建议为先验值设置一些初始值,以确保0模型很难理解,因为您没有告诉我们哪些变量是数据,哪些变量是参数以及数据的结构(或者,您只需要已经熟悉该特定文章的人提供答案).您是否尝试过让JAG自行初始化链,即忽略显式参数初始化?Kruschke先生,谢谢您的回答。我目前正在学习您的教科书,做贝叶斯数据分析,在这个主题上,这非常有用。我编辑了我的问题,以包含更多数据、初始值和r的代码我试着让JAGS初始化对象“一”Escoto先生接着指出,随机的初始化将类似于编造随机索赔数据,并可能解释分歧。我要感谢您的评论。我的意思是注释<代码> inIT= jAg.init,< /Cord>将不得不考虑其他细节。稍后,当我有时间…这个错误可能发生,因为<代码> PROB.Cop[(1)] /Cord>得到的值几乎等于零(对于计算机来说,一个精确的零)。因此,当试图考虑值1已经从伯努利(P=0)中获得时,模型崩溃。为解决此问题,通常建议为优先级设置一些初始值,以确保0
jags.init <- list(means=list(weights=prior.weights),
              equal=list(weights=rep(1/m,m))) 
m <- length(actual.means)
alpha0 <- 20
alpha <- prior.weights * alpha0
trend.prior.mu <- .05
trend.prior.sigma <- .01
trend.scale <- trend.prior.sigma^2 / (1+trend.prior.mu)
trend.shape <- (1+trend.prior.mu)/trend.scale
model <- "model {
  weights ~ ddirch(alpha)
  trend.factor ~ dgamma(trend.shape, trend.rate)
  for (i in 1:length(claims)) {
    buckets[i] ~ dcat(weights)
    mu[i] <- means[buckets[i]] / trend.factor^ages[i]
    claims[i] ~ dexp(1/mu[i])
  }
  for (i in 1:length(capped.claims)) {
    capped.buckets[i] ~ dcat(weights)
    capped.mu[i] <- means[capped.buckets[i]]/trend.factor^capped.ages[i]
    prob.capped[i] <- exp(-capped.claims[i]/capped.mu[i])
    ones[i] ~ dbern(prob.capped[i])
  }
}"
model.out <- autorun.jags(model, data=jags.data, inits=jags.init,
                      monitor=c("weights","trend.factor"),
                      startburnin=1000, startsample=5000,
                      n.chains=n.chains, interactive=FALSE, thin=thin.factor)