Node Inconsistent with parents

60 Views Asked by At

I am new to Bayesian statistics and I have been trying to write up a logistic model for JAGS in R. I have defined the priors and the likelihood accordingly. However. I keep getting an error "Node Inconsistent with parents". I have 6 categorical variables and 4 Numerical variables. Any advise would be much appreciated. Thank you.

Code:

model = "model{
# Priors
beta1~dnorm(0,1/100^2);beta2~dunif(0,1);
beta3~dnorm(64.4,1/100^2);beta4~dunif(0,1);
beta5~dunif(0,1);beta6~dunif(0,1);
beta7~dunif(0,1);beta8~dnorm(0.40,1/100^2);
beta9~dnorm(0.64,1/100^2);beta10~dunif(0,1);

# Likelihood
for(i in 1:N) {
  p[i] = 1/(1 + exp(-(beta1 
  + beta2*genderMale[i] 
  + beta3*age[i] 
  + beta4*hypertension1[i]
  + beta5*heart_disease1[i]
  + beta6*ever_marriedYes[i] 
  + beta7*Residence_typeUrban[i] 
  + beta8*avg_glucose_level[i]
  + beta9*bmi[i] 
  + beta10*smoking_statussmokes[i])));
  Y[i] ~ dbern(p[i])
}
}"

data$gender <- as.factor(data$gender)
data$hypertension <- as.factor(data$hypertension)
data$heart_disease <- as.factor(data$heart_disease)
data$Residence_type <- as.factor(data$Residence_type)
data$smoking_status <- as.factor(data$smoking_status)
data$work_type <- as.factor(data$work_type)

X <- model.matrix(stroke ~ gender + age + hypertension + heart_disease + ever_married + Residence_type + avg_glucose_level + bmi + smoking_status, data=data) # Design matrix
Y <- data$stroke;

library("rjags");library(coda);
set.seed(42)

data = list(Y = Y, genderMale = X[,"genderMale"], age = X[,"age"], hypertension1 = X[,"hypertension1"], heart_disease1 = X[,"heart_disease1"], ever_marriedYes = X[,"ever_marriedYes"], Residence_typeUrban = X[,"Residence_typeUrban"], avg_glucose_level = X[,"avg_glucose_level"], bmi = X[,"bmi"], smoking_statussmokes = X[,"smoking_statussmokes"], N =length(Y));
variable_names = c("beta1","beta2","beta3","beta4","beta5","beta6","beta7","beta8","beta9","beta10","p");

fileConn=file("model.temp");
writeLines(model, fileConn);
close(fileConn);
m = jags.model(file="model.temp", data=data)


draw = jags.samples(m, 1000, thin=1, variable.names = variable_names)
# Convert to a list
make_list <- function(draw)
{
  results = list()
  for(name in names(draw))
  {
    # Extract "chain 1"
    results[[name]] = as.array(draw[[name]][,,1])
    
    # Transpose 2D arrays
    if(length(dim(results[[name]])) == 2)
      results[[name]] = t(results[[name]])
  }
  return(results)
}
0

There are 0 best solutions below