JAGS:与父项

时间:2016-12-15 16:01:53

标签: jags

我试图从Vafance发表的论文“贝叶斯声明严重性与混合分布”中应用本尼迪克特·埃斯科托的方法。我似乎遇到了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  1501 0.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)

请注意,对于每个上限声明,对象“ones”的值为1。

初始值如下:

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

JAGS模型编码如下:

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])
  }
}"

Dirichlet,Categorical和Gamma分布用于先验。 Ones是伯努利分发的,将索赔描述为上限或无上限。

最后,该模型在JAGS中运行,具有以下内容:

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)

有人会知道出了什么问题吗?感谢

0 个答案:

没有答案