Tengo un modelo para lograr estimaciones bayesianas del tamaño de la población y la probabilidad de detección en una distribución binomial basada únicamente en el número observado de objetos observados : para . Por simplicidad, asumimos que N está fijado en el mismo valor desconocido para cada y_i . En este ejemplo, y = 53,57,66,67,73 .
Este modelo, cuando se estima en rstan
, difiere de los resultados obtenidos de una aproximación de cuadrícula de la parte posterior. Estoy tratando de precisar por qué. (Los lectores interesados pueden encontrar que esta pregunta es una continuación de mi respuesta aquí ).
rstan
Aproximación
Como referencia, este es el código rstan.
raftery.model <- "
data{
int I;
int y[I];
}
parameters{
real<lower=max(y)> N;
simplex[2] theta;
}
transformed parameters{
}
model{
vector[I] Pr_y;
for(i in 1:I){
Pr_y[i] <- binomial_coefficient_log(N, y[i])
+multiply_log(y[i], theta[1])
+multiply_log((N-y[i]), theta[2]);
}
increment_log_prob(sum(Pr_y));
increment_log_prob(-log(N));
}
"
raft.data <- list(y=c(53,57,66,67,72), I=5)
system.time(fit.test <- stan(model_code=raftery.model, data=raft.data,iter=10))
system.time(fit <- stan(fit=fit.test, data=raft.data,iter=10000,chains=5))
Tenga en cuenta que lanzo theta
como un 2-simplex. Esto es solo por simplicidad. La cantidad de interés es theta[1]
; Obviamente theta[2]
es información superflua.
Además, es un valor real ( rstan
solo acepta parámetros con valores reales porque es un método de gradiente), así que escribí una distribución binomial con valores reales.
Resultados de Rstan
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
N 1078.75 256.72 15159.79 94.44 148.28 230.61 461.63 4575.49 3487 1
theta[1] 0.29 0.00 0.19 0.01 0.14 0.27 0.42 0.67 2519 1
theta[2] 0.71 0.00 0.19 0.33 0.58 0.73 0.86 0.99 2519 1
lp__ -19.88 0.02 1.11 -22.89 -20.31 -19.54 -19.09 -18.82 3339 1
Aproximación de cuadrícula
La aproximación a la cuadrícula se produjo como a continuación. Las restricciones de memoria me impiden hacer una cuadrícula más fina en mi computadora portátil.
theta <- seq(0+1e-10,1-1e-10, len=1e3)
N <- round(seq(72, 5000, len=1e3)); N[2]-N[1]
grid <- expand.grid(N,theta)
y <- c(53,57,66,67,72)
raftery.prob <- function(x, z=y){
N <- x[1]
theta <- x[2]
exp(sum(dbinom(z, size=N, prob=theta, log=T)))/N
}
post <- matrix(apply(grid, 1, raftery.prob), nrow=length(N), ncol=length(theta),byrow=F)
post.norm <- post/sum(post)
Utilicé la aproximación de cuadrícula para producir esta visualización de la densidad posterior. Podemos ver que la parte posterior tiene forma de plátano; Este tipo de posterior puede ser problemático para la HMC métrica euclidiana. (La gravedad de la forma del plátano en realidad se suprime aquí ya que está en la escala logarítmica). Si piensa en la forma del plátano por un minuto, se dará cuenta de que debe estar en la línea . (Además, la aproximación a la cuadrícula que se muestra en este gráfico no está normalizada por razones de claridad; de lo contrario, el plátano es un poco demasiado estrecho para distinguirlo claramente).
Resultados de aproximación de cuadrícula
do.call(cbind, lapply(c(0.025, .25, .5, .75, .975), function(quantile){
approx(y=N, x=cumsum(rowSums(post.norm))/sum(post.norm), xout=quantile)
}))
[,1] [,2] [,3] [,4] [,5]
x 0.025 0.25 0.5 0.75 0.975
y 92.55068 144.7091 226.7845 443.6359 2475.398
Discusión
El cuantil del 97.5% para es mucho más grande en mi modelo que para la aproximación a la cuadrícula, de lo contrario, sus cuantiles son similares a la aproximación a la cuadrícula. Interpreto que esto indica que los dos métodos generalmente están de acuerdo. Sin embargo, no sé cómo interpretar la discrepancia en el cuantil del 97.5%.rstan
He desarrollado varias explicaciones posibles de lo que podría explicar la divergencia entre la aproximación a la cuadrícula y los resultados del rstan
muestreo HMC-NUTS, pero no estoy seguro de cómo entender si una, ambas o ninguna de las explicaciones es correcta.
- Rstan está equivocado y la cuadrícula es correcta. La densidad en forma de plátano es problemática
rstan
, especialmente cuando desvía hacia , por lo que estas cantidades de cola no son confiables. Podemos ver en la trama de la parte posterior sobre la cuadrícula que la cola es muy agudo en los valores más grandes . - Rstan es correcto y la cuadrícula está mal. La cuadrícula hace dos aproximaciones que pueden socavar los resultados. Primero, la cuadrícula es solo un conjunto finito de puntos sobre un subespacio posterior, por lo que es una aproximación aproximada. En segundo lugar, porque es un subespacio finito, estamos declarando falsamente que haya 0 probabilidad posterior sobre los valores de más grande que nuestro valor de cuadrícula grande para . Del mismo modo, es mejor entrar en las colas de la cuadrícula, por lo que sus quanitles de cola son correctos.
rstan
Necesitaba más espacio para aclarar un punto de la respuesta de Juho. Si entiendo correctamente, podemos integrar fuera de la parte posterior para obtener la distribución beta-binomial:
En nuestro caso, y porque tenemos un uniforme previo en . Creo que la parte posterior debería ser donde porque . Pero esto parece divergir salvajemente de la respuesta de Juho. ¿Dónde me he equivocado?