Existe una serie de estimadores robustos de escala . Un ejemplo notable es la mediana de la desviación absoluta que se relaciona con la desviación estándar como . En un marco bayesiano, existen varias formas de estimar de manera sólida la ubicación de una distribución más o menos normal (por ejemplo, una Normal contaminada por valores atípicos), por ejemplo, se podría suponer que los datos se distribuyen como en distribución o distribución de Laplace. Ahora mi pregunta:
¿Cuál sería un modelo bayesiano para medir la escala de una distribución más o menos normal de una manera robusta, robusta en el mismo sentido que el MAD o estimadores robustos similares?
Como es el caso con MAD, sería genial si el modelo bayesiano pudiera acercarse al SD de una distribución normal en el caso en que la distribución de los datos en realidad se distribuye normalmente.
editar 1:
Un ejemplo típico de un modelo que es robusto contra la contaminación / valores atípicos al asumir los datos es más o menos normal es usar en la distribución como:
Donde es la media, es la escala y es el grado de libertad. Con priors adecuados en y , será una estimación de la media de que va a ser robusto frente a valores atípicos. Sin embargo, no será una estimación consistente de la SD de ya que depende de . Por ejemplo, si se fijaría en 4.0 y el modelo anterior se ajustaría a una gran cantidad de muestras de un distribución entonces s estaría alrededor de 0.82. Lo que estoy buscando es un modelo que sea robusto, como el modelo t, pero para el SD en lugar de (o además de) la media.
editar 2:
Aquí sigue un ejemplo codificado en R y JAGS de cómo el modelo t mencionado anteriormente es más robusto con respecto a la media.
# generating some contaminated data
y <- c( rnorm(100, mean=10, sd=10),
rnorm(10, mean=100, sd= 100))
#### A "standard" normal model ####
model_string <- "model{
for(i in 1:length(y)) {
y[i] ~ dnorm(mu, inv_sigma2)
}
mu ~ dnorm(0, 0.00001)
inv_sigma2 ~ dgamma(0.0001, 0.0001)
sigma <- 1 / sqrt(inv_sigma2)
}"
model <- jags.model(textConnection(model_string), list(y = y))
mcmc_samples <- coda.samples(model, "mu", n.iter=10000)
summary(mcmc_samples)
### The quantiles of the posterior of mu
## 2.5% 25% 50% 75% 97.5%
## 9.8 14.3 16.8 19.2 24.1
#### A (more) robust t-model ####
library(rjags)
model_string <- "model{
for(i in 1:length(y)) {
y[i] ~ dt(mu, inv_s2, nu)
}
mu ~ dnorm(0, 0.00001)
inv_s2 ~ dgamma(0.0001,0.0001)
s <- 1 / sqrt(inv_s2)
nu ~ dexp(1/30)
}"
model <- jags.model(textConnection(model_string), list(y = y))
mcmc_samples <- coda.samples(model, "mu", n.iter=1000)
summary(mcmc_samples)
### The quantiles of the posterior of mu
## 2.5% 25% 50% 75% 97.5%
##8.03 9.35 9.99 10.71 12.14