Source code for ollin.estimation.occupancy.single_species

from ..stanmodels import StanModel
from .base import OccupancyEstimate

CODE = u'''
data {
    int<lower=0> steps;
    int<lower=0> cams;
    int<lower=0, upper=1> detections[cams, steps];

    // Parameters for Ocuppancy Beta Prior
    real<lower=0> alpha_oc;
    real<lower=0> beta_oc;

    // Parameters for detectionsectability Beta Prior
    real<lower=0> alpha_det;
    real<lower=0> beta_det;
}
transformed data {
    int<lower=0> counts[cams]; // detectionsection count per site
    for(m in 1:cams) {
        counts[m] = sum(detections[m]);
    }
}
parameters {
    real<lower=0, upper=1> occupancy;
    real<lower=0, upper=1> detectability;
}
model {
    occupancy ~ beta(alpha_oc, beta_oc);
    detectability ~ beta(alpha_det, beta_det);

    for (j in 1:cams) {
        if (counts[j] == 0)
            target += log_sum_exp(
                binomial_lpmf(counts[j] | steps, detectability) + log(occupancy),
                log(1 - occupancy));
        else
            target += log(occupancy) + binomial_lpmf(counts[j] | steps, detectability);
    }
}
'''


[docs]class Model(StanModel): """McKenzie Model for Single Species - Single Season occupancy estimation. # TODO """ name = 'McKenzie Single Species - Single Season' stancode = CODE
[docs] def prepare_data(self, detection, priors): steps, cams = detection.detections.shape data = { 'steps': steps, 'cams': cams, 'detections': detection.detections.T.astype(int).tolist(), 'alpha_det': priors.get('alpha_det', 1), 'beta_det': priors.get('beta_det', 1), 'alpha_oc': priors.get('alpha_oc', 1), 'beta_oc': priors.get('beta_oc', 1)} return data
[docs] def estimate(self, detection, method='MAP', priors=None): stan_result = super(Model, self).estimate(detection, method, priors) occupancy = stan_result['occupancy'] detectability = stan_result['detectability'] est = OccupancyEstimate( occupancy, self, detection, detectability=detectability) return est