Hi all,
I have a mark-recapture model that borrows heavily from code here. The model estimates detection probabilities and survival for sample units. The data I currently have has four time steps (for example, 1101 or 1001 or 1111).
I want to borrow the detection probabilities so that I can look at the same data set for just two time steps (e.g. 10 or 11), but I am not sure how to do this. I don’t think I need to stay with my current mark recapture model, but rather go with a simpler binomial model with a detection probability included. I am just not sure how to do this.
Any help on getting started would be appreciated. Here is the code I have for modeling temporal effects with no covariates
// This models is derived from section 12.3 of "Stan Modeling Language
// User's Guide and Reference Manual"
functions {
int first_capture(int[] y_i) {
for (k in 1:size(y_i))
if (y_i[k])
return k;
return 0;
}
int last_capture(int[] y_i) {
for (k_rev in 0:(size(y_i) - 1)) {
// Compoud declaration was enabled in Stan 2.13
int k = size(y_i) - k_rev;
// int k;
// k = size(y_i) - k_rev;
if (y_i[k])
return k;
}
return 0;
}
matrix prob_uncaptured(int nind, int n_occasions,
matrix p, matrix phi) {
matrix[nind, n_occasions] chi;
for (i in 1:nind) {
chi[i, n_occasions] = 1.0;
for (t in 1:(n_occasions - 1)) {
// Compoud declaration was enabled in Stan 2.13
int t_curr = n_occasions - t;
int t_next = t_curr + 1;
/*
int t_curr;
int t_next;
t_curr = n_occasions - t;
t_next = t_curr + 1;
*/
chi[i, t_curr] = (1 - phi[i, t_curr])
+ phi[i, t_curr] * (1 - p[i, t_next - 1]) * chi[i, t_next];
}
}
return chi;
}
}
data {
int<lower=0> nind; // Number of individuals
int<lower=2> n_occasions; // Number of capture occasions
int<lower=0,upper=1> y[nind, n_occasions]; // Capture-history
}
transformed data {
int n_occ_minus_1;
// Compoud declaration is enabled in Stan 2.13
// int n_occ_minus_1 = n_occasions - 1;
int<lower=0,upper=n_occasions> first[nind];
int<lower=0,upper=n_occasions> last[nind];
n_occ_minus_1 = n_occasions - 1;
for (i in 1:nind)
first[i] = first_capture(y[i]);
for (i in 1:nind)
last[i] = last_capture(y[i]);
}
parameters {
vector<lower=0,upper=1>[n_occ_minus_1] alpha; // Mean survival
vector<lower=0,upper=1>[n_occ_minus_1] beta; // Mean recapture
}
transformed parameters {
matrix<lower=0,upper=1>[nind, n_occ_minus_1] phi;
matrix<lower=0,upper=1>[nind, n_occ_minus_1] p;
matrix<lower=0,upper=1>[nind, n_occasions] chi;
// Constraints
for (i in 1:nind) {
for (t in 1:(first[i] - 1)) {
phi[i, t] = 0;
p[i, t] = 0;
}
for (t in first[i]:n_occ_minus_1) {
phi[i, t] = alpha[t];
p[i, t] = beta[t];
}
}
chi = prob_uncaptured(nind, n_occasions, p, phi);
}
model {
// Priors
// Uniform priors are implicitly defined.
// alpha ~ uniform(0, 1);
// beta ~ uniform(0, 1);
// Likelihood
for (i in 1:nind) {
if (first[i] > 0) {
for (t in (first[i] + 1):last[i]) {
1 ~ bernoulli(phi[i, t - 1]);
y[i, t] ~ bernoulli(p[i, t - 1]);
}
1 ~ bernoulli(chi[i, last[i]]);
}
}
}