Estoy tratando de ajustar un modelo exponencial simple para datos censurados a la izquierda usando RSTAN para replicar algo que hice en JAGS.
El modelo JAGS es:
model{
for(i in 1:N){
isAboveLOD[i] ~ dinterval(x[i], LOD[i])
x[i] ~ dexp(lambda)
}
lambda ~ dgamma(0.001, 0.001)
}
Encontrará una explicación completa de los datos simulados en http://jamescurran.co.nz/2014/06/bayesian-modelling-of-left-censored-data-using-jags/ pero la esencia es que los datos tenían 9691 valores censurados (de 10.000) y que los datos se muestrearon originalmente a partir de una distribución Exp(1,05), con censura a la izquierda realizada en log(29).
Cuando ejecuto este modelo con RSTAN, esencialmente no obtengo ningún movimiento en la cadena y, por tanto, la estimación de lambda es muy errónea (0,3 en mi primera ejecución). Estoy seguro de que el error es elemental, pero me gustaría que me aconsejarais. Mi código RSTAN (incluyendo la simulación de datos) se da a continuación.
expCode = '
data {
int<lower=0> nObs;
int<lower=0> nCens;
real<lower=0> yObs[nObs];
real<lower=0> U;
}
parameters {
real<lower=0, upper=U> yCens[nCens];
real<lower=0> lambda;
}
model {
for (n in 1:nObs)
yObs[n] ~ exponential(lambda);
for (n in 1:nCens)
yCens[n] ~ exponential(lambda);
lambda ~ gamma(0.001, 0.001);
}
'
set.seed(35202)
x = rexp(10000, rate = 1.05)
## set all the censored values to NA's
x[x < log(29)] = NA
yObs = x[!is.na(x)]
yCens = x[is.na(x)]
dataList = list(nObs = length(yObs), nCens = length(yCens), U = log(29), yObs = yObs)
library(rstan)
fit = stan(model_code = expCode, data = dataList, iter = 1000, chains = 1)