Hi I have a hierarchical model that assumes a multinomial likelihood function and hierarchical model multinomial probabilities. I assumed the dmulti() likelihood in nimble would ensure the the multinomial probability posterior samples could not go below 0, but Im getting negative posterior samples. How is that possible? Im not able to share the data due to data sharing resitrctions.
##################################################################
# Misclassification Data Model
##################################################################
for(j in 1:N_j){
x_multi_j[j,1:5] ~ dmulti(rho_stb[gets_j[j], gett_j[j], 1:5], tot_j[j])
}
for(s in 1:Nstates){
for(t in 1:Nyears){
rho_stb[s,t,tpindex] <- sens_st[s,t] * (truePM_st[s,t] - omega_st[s,t] * (1-rho_env_st[s,t] ))
rho_stb[s,t,fnindex] <- (1-sens_st[s,t]) * (truePM_st[s,t] - omega_st[s,t] * (1-rho_env_st[s,t] ))
rho_stb[s,t,upindex] <- truePM_st[s,t] - (rho_stb[s,t,tpindex] + rho_stb[s,t,fnindex])
rho_stb[s,t,fpindex] <- (1-truePM_st[s,t]) - (1- omega_st[s,t])*(1- rho_env_st[s,t])
rho_stb[s,t,unindex] <- 1- (rho_stb[s,t,tpindex] + rho_stb[s,t,fpindex] + rho_stb[s,t,fnindex] + rho_stb[s,t,upindex] )
# truePM_st[s,t] ~ dunif(omega_st[s,t] * (1- rho_env_st[s,t] ), rho_env_st[s,t] + (omega_st[s,t] * (1-rho_env_st[s,t] )))
truePM_st[s,t] ~ dunif(0,1)
rho_env_st[s,t] ~ dunif(0, 1)
# omega_st[s,t] ~ dunif(0, 1)
# sens_st[s,t] ~ dunif(0.2,1) phi(eta_st[s,t])
sens_st[s,t] <- 1/(1 + exp(-eta_stk[s,t,1]))
omega_st[s,t]<- 1/(1 + exp(-eta_stk[s,t,2]))
eta_stk[s,t,1] <- mean_eta_sk[s,1] + phi_s[s] + inprod(Dcomb[t,1:(Nyears-1)], delta_smk[s,1:(Nyears-1),1])
eta_stk[s,t,2] <- mean_eta_sk[s,2] + phi_s[s] + inprod(Dcomb[t,1:(Nyears-1)], delta_smk[s,1:(Nyears-1),2])
}
#Deltas are deviations away from mean
for(tindex in 1:(Nyears-1)){
delta_smk[s,tindex,1] ~ dnorm(0, sd = sigma_delta_se)
delta_smk[s,tindex,2] ~ dnorm(0, sd = sigma_delta_om)
}
mean_eta_sk[s,1] ~ dnorm(eta_us_k[1], sd = sigma_se)
mean_eta_sk[s,2] ~ dnorm(eta_us_k[2], sd = sigma_om)
}
# ICAR
phi_s[1:Nstates] ~ dcar_normal(adj[1:L], weights[1:L], num[1:Nstates], tau = 1, zero_mean = 1) # its scaled so tau = 1 zero_mean = 1 written before.
eta_us_k[1] <- log(sens_us/(1 - sens_us))
eta_us_k[2] <- log(omega_us/(1 - omega_us))
sens_us ~ dunif(0,1)
omega_us ~ dunif(0,1)
sigma_delta_se ~ T(dnorm(0,1), 0, )
sigma_delta_om ~ T(dnorm(0,1), 0, )
sigma_se ~ T(dnorm(0,1), 0, )
sigma_om ~ T(dnorm(0,1), 0, )
rho_se ~ dunif(-1,1)
rho_om ~ dunif(-1,1)
})