拟合多项式模型时的运行误差。"部分观测,部分缺失"

问题描述 投票:0回答:1

我是Jags的新手,我试图对我的数据拟合一个多项式模型。当我运行代码时,我得到以下错误。"positive.counts[1,1:9] is partly observed and partly missing".我上网查了一下,发现这是由于一个节点不能同时有观测值和缺失值。这是因为在我的数据中(见下面的代码),有值和NA在同一行。如果我把NA用0值代替,模型就可以正常工作了.有谁有办法解决这个问题吗?下面你可以找到数据和代码!

非常感谢。

Elisa

##########################################################################
# load jags
library(runjags)

# define the data: 
data <- list("N_cases"=c(978,737, 737, 1189,  270,  268), "positive.counts" = matrix(c(649 ,567 ,464 ,821,  98, 117,203 , 133,  81, 290,  41,  26,3, 7, 4, 6, 5, 0,NA, NA, NA, NA, 20, 19,24, 15,  3, NA, 21, 15,NA,  NA, 184,  NA,  17,  23, NA, NA, NA, NA, 26, 17,99, 15,  1, 72, 14, 25,NA, NA, NA, NA, 28, 26),6,9), "n"= 6,"n_responses" = 9)

# define the model
model {   mu.w <- 0
          prec <- 0.5
          for (s in 1:n_responses) {
            w[s] ~ dnorm(mu.w, prec);
            a[s] <- exp(w[s]); # positive parameter
          }
          for (i in 1:n){
            positive.counts[i,1:n_responses] ~ dmulti(p[i,1:n_responses], N_cases[i])
          }  
            for(i in 1:n){  
            for (s in 1:n_responses) {
              delta[i, s] ~ dgamma(a[s], 1)
            }
          }
          for(i in 1:n){  
            for (s in 1:n_responses) {
              p[i, s] <- delta[i,s] / sum(delta[i,1:n_responses])
            }
          }
        }  

# run the model
n.adapt=1000
n.burn=5000
n.iters=10000
n.chains <- 5;
n.total.samples <- 10000
n.samples.per.chain <- (n.total.samples %/% n.chains) 
n.thin <- n.iters %/% n.samples.per.chain; if(n.thin==0) n.thin <- 1;

tomonitor <- c("a","p")

mcmc.post <- run.jags(model="multi_model.jags",
                                  data=data,
                                   method="parallel", 
                                  sample=n.samples.per.chain, 
                                  burnin=n.burn,
                                  adapt=n.adapt,
                                  n.chains=n.chains,
                                  thin=n.thin,
                                  monitor= tomonitor);
r mcmc jags multinomial
1个回答
0
投票

正如你所发现的那样,JAGS不能让你对部分观测的多叉分布进行建模。 这是一个限制。 如果你替换掉 NAs与零,你不再说 "我没有行和列变量组合的数据",而是说 "我没有观察到这个行和列变量组合的事件"。 所以模型会(可能)运行并产生一些输出。 但是你不再对你观察到的数据集进行建模。 所以模型的结果不再适用于你的数据。 你从中得出的结论将是无效的。

所以,你需要一种方法来模拟具有不完整观测值的多项式数据。 一种方法是将你的数据转化为一系列相关的二项式变量。 对于您的具有k个类别的多项式数据中的每个类别c[i],您创建一个二项式变量Y[i] ~ Bin(p[i],n),其中n是观测值的数量(N_cases 在您的数据中?)与预测因子的组合(行的 positive.counts in your data?),而p[i]= Prob(x >= c[i])。 换句话说,p[i]是具有相关预测变量集的观测值属于c[i]或以上类别的概率。 所以,根据定义,p[1]=1)。

如果这种解释有点抽象,我很抱歉,但你给了我们你的代码,但没有背景。 我无法用你的解释来解释 实际 模型,因为我不知道它是什么。

在JAGS中给出了两种拟合这种模型的方法。此职位. 你可以相信答案的作者 他是Martyn Plummer. 他写了JAGS。


0
投票

非常感谢你的回答和好的建议.我没有很清楚地解释我的自我:当我说带零的模型正常工作时,我的意思是它正在运行。我知道这样做是错误的,但这只是一个检查,以确保错误与NaN有关,并排除任何其他类型的错误.我也没有很好地解释我的模型:测试阳性的病例数遵循一个多叉分布,其中N_cases是观察的总数,p[i]是每个n_responses预测因子的概率(正如你正确所说的那样).我在我的代码中实现了你向我指出的Martyn Plummer的代码,但现在我得到了另一个错误。" Cannot insert node into p.bin[6,2]. Dimension mismatch". 尺寸不匹配"。你知道这里出了什么问题吗?下面你可以找到代码。非常感谢

model{
mu.w <- 0
prec <- 0.5
 for (j in 1:n_responses) {
    w[j] ~ dnorm(mu.w, prec);
    a[j] <- exp(w[j]); # positive parameter
 }
 for (i in 1:n) {
    N_cases.bin[i,1] <- N_cases[i]
    p.bin[i,1] <- p[i,1]
    for (j in 2:n_responses) {
        N_cases.bin[i,j] <- N_cases.bin[i,j-1] - positive.counts[i,j-1]
        p.bin[i,j] <- p[i,j]/(sum(p[i,j:n_responses]) + piz)
    }
    for (j in 1:n_responses) {
        delta[i, j] ~ dgamma(a[j], 1)
        p[i, j] <- delta[i,j] / sum(delta[i,1:n_responses])
        positive.counts[i, j] ~ dbinom(p.bin[i,j], N_cases.bin[i,j])
    }
    piz[i] <- 1 - sum(p[i,1:n_responses])
    Z[i] <- N_cases[i] - sum(positive.counts[i,1:n_responses])
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.