Please share your Stan program and accompanying data if possible.
When including Stan code in your post it really helps if you make it as readable as possible by using Stan code chunks (```stan) with clear spacing and indentation. For example, use
model {
vector[N] mu = alpha + beta * x;
y ~ normal(mu, sigma);
}
I must not be understanding how to properly code the multinomial in Stan. I use Rstan. Here's a simple example. After compiling, when I run the model I get an error message to the effect that is am attempting to assign reals to a vector. Perhaps someone can identify the error in my code. Here's the example:
//simple_cjs_test.stan
// Jume 11 2018
// Basic cormack-jolly-seber mark-recapture model for one initial marking and release ocassion/site (site 1)
// and two recapture/resight ocassions (sites 2 and 3). Multinomial model:
// Cases: case1: total number marked (M), that survive to site2, are detected (resighted) at site2,
// and survive and are detected at site 3 (=m11).
// Case2: total number marked that survive to site 2, are not detected at site 2 but do survive
// to site 3 and are detected at site 3 (=m01). Note: survival from site 2 to 3
// and probability of detection at site 3 are inseparable, hence one parameter for the joint
// probability of survival from 2 to 3 and detection at 3.
// Case3: total number marked that survive to site 2, are resighted at site 2 and not resigthed thereafter (=m10).
// Case4: total number marked that are never resighted (=m00).
// M = m11 + m01 + m10 + m00; m00 = M - (m11 + m01 + m10.
// Likelihood(dropping the combinatorics:
// p(m11, m01, m10, m00| s,p,v) = spv^m11 * s(1-p)v^m01 * sp(1-v)^m10 *(s(1-p)(1-v)+(1-s))^m00.
data {
int<lower=0> n_occasions; // Mark and resight data
int<lower=0> marr[n_occasions];
}
parameters {
vector<lower=0, upper=1>[3] phi;
// phi[1]:Survival from inital marking at site1 to first resighting location at site2 (Alternative: s)
// phi[2]:Probability of resigthing at site 2 (Alternative: p)
// phi[3]:Probability of survival from site 2 to site 3 and recapture at site 3. (Alternative: v)
}
transformed parameters {
// simplex[n_occasions] pr[n_occasions];
vector<lower=0, upper=1>[4] pr;//(Alternative? - I am unsure about this).
// Define the cell probabilities of pr:
pr[1] = phi[1] * phi[2];
pr[2] = phi[1] *(1-phi[2])*phi[3];
pr[3] = phi[1]*phi[2]*(1-phi[3]);
pr[4] = 1-(pr[1]+pr[2]+pr[3]);
// Alternative coding:
// pr[1] = s*p;
// pr[2] = s*(1-p)*v;
// pr[3] = s*p*(1-v);
// pr[4] = 1-(pr[1]+pr[2]+pr[3]);
}
model {
// Priors
// Uniform priors for phi are implicitly defined.
// Define the multinomial likelihood
for (t in 1:n_occasions)
marr[t] ~ multinomial(pr[t]);
}
#simple_cjs_test.R.
#NG June 11 2018
library(rstan)
rstan_options(auto_write = TRUE)
options(mc.cores = parallel::detectCores())
set.seed(123)
## Read data
sdata<- read_rdump("simple_cjs_test_data.R")
n_occasions<-length(sdata$marr)
stan_data = list(sdata,n_occasions)
## Parameters monitored
params <- c("phi")
#Alternative: params<-("s", "p", "v")
## MCMC settings
ni <- 2000
nt <- 1
nb <- 1000
nc <- 1
## Call Stan from R
simple_test_ex1 <- stan("simple_cjs_test.stan",
data = stan_data, pars = params,
chains = nc, iter = ni, warmup = nb, thin = nt,
seed = 1,
open_progress = FALSE)
## Summarize posteriors
print(simple_test_ex1, digits = 3)
marr <-
structure(c(350, 15, 250, 385))
Much thanks for any feedback