2017-06-30 1 views
0

J'apprends l'analyse de données bayésiennes. J'essaie de reproduire les tutoriels par Trond Reitan par stan, qui sont créés à l'origine par WinBugs.Spécification de la variable latente entière en cours

Plus précisément, j'ai données suivant et le modèle

weta.windata<-list(numdet=c(0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0, 3, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 0, 3, 1, 1, 3, 1, 1, 2, 0, 2, 1, 1, 1, 1,0, 0, 0, 2, 0, 2, 4, 3, 1, 0, 0, 2, 0, 2, 2, 1, 0, 0, 1), 
      numvisit=c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,4, 4, 4, 4, 4, 4, 4 ,4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), 
      nsites=72) 

model_string1=" 
data{ 
int nsites; 
real<lower=0> numdet[nsites]; 
real<lower=0> numvisit[nsites]; 
} 
parameters{ 
real<lower=0> p; 
real<lower=0> psi; 
int<lower=0> z[nsites]; 
} 
model{ 
p~uniform(0,1); 
psi~uniform(0,1); 

for(i in 1:nsites){ 
z[i]~ bernoulli(psi); 
p.site[i]~z[i]*p; 
numdet[i]~binomial(numvisit[i],p.site[i]); 
} 
} 
" 

mcmc_samples <- stan(model_code=model_string1, 
         data=weta.windata, 
         pars=c("p","psi","z"), 
         chains=3, iter=30000, warmup=10000) 

Le contexte est de détecter wetas dans les champs. Il y a 72 sites. pour chaque site, les chercheurs se sont rendus plusieurs fois (c'est-à-dire, numvisit) et ont enregistré le nombre de fois que weta a été trouvé (c'est-à-dire numdet).

Il existe une variable latente z, décrivant si un site a weta ou non. psi est la probabilité qu'un site ait weta. p est le taux de détection.

Le problème que j'ai est que je ne peux pas déclarer z pour être des entiers

parameters or transformed parameters cannot be integer or integer array; found declared type int, parameter name=z 
Problem with declaration. 

Cependant, si je mets z pour être vrai, c'est

real<lower=0> z[nsites]; 

le problème devient je ne peux pas définir la variable de bernoulli comme entier ...

No matches for: 

    real ~ bernoulli(real) 

Je suis très nouveau à stan. Pardonnez-moi si cette question est très stupide.

Répondre

2

Stan ne prend pas en charge les paramètres entiers ou les hacks pour vous permettre de prétendre que les variables réelles sont des entiers. Ce qu'il supporte, c'est marginaliser les variables entières hors de la densité. Vous pouvez ensuite les reconstruire avec beaucoup plus d'efficacité et une résolution de queue beaucoup plus élevée.

Le chapitre du manuel sur les paramètres discrets latents est le point de départ. Il comprend une mise en œuvre des modèles de population CJS, qui peut être familier. J'ai implémenté les modèles d'occupation Dorazio et Royle comme cas d'étude et Hiroki Ito a traduit l'ensemble du livre de Kery et Schaub à Stan. Ils sont tous liés aux utilisateurs >> documentation sur le site Web.