Esistono numerosi stimatori di scala robusti . Un esempio notevole è la deviazione assoluta mediana che si riferisce alla deviazione standard come . In un quadro bayesiano esistono numerosi modi per stimare in modo robusto la posizione di una distribuzione approssimativamente normale (diciamo una Normale contaminata da valori anomali), ad esempio, si potrebbe supporre che i dati siano distribuiti alla distribuzione o alla distribuzione di Laplace. Ora la mia domanda:
Quale sarebbe un modello bayesiano per misurare la scala di una distribuzione approssimativamente normale in modo robusto, robusto nello stesso senso del MAD o di stimatori robusti simili?
Come nel caso di MAD, sarebbe corretto se il modello bayesiano potesse avvicinarsi alla DS di una distribuzione normale nel caso in cui la distribuzione dei dati sia effettivamente distribuita.
modifica 1:
Un esempio tipico di un modello robusto contro la contaminazione / i anomali quando si presume che i dati siano all'incirca normali sta usando alla distribuzione come:
Dove è la media, è la scala e è il grado di libertà. Con opportune priori su e \ nu , m sarà una stima del mezzo di y_i che saranno robusti contro valori anomali. Tuttavia, s non sarà una stima coerente della SD di y_i poiché s dipende da \ nu . Ad esempio, se \ nu verrebbe fissato su 4.0 e il modello sopra sarebbe adattato a un numero enorme di campioni da una distribuzione \ mathrm {Norm} (\ mu = 0, \ sigma = 1), allora ssarebbe circa 0,82. Quello che sto cercando è un modello che sia robusto, come il modello t, ma per la SD invece (o in aggiunta) la media.
modifica 2:
Segue un esempio codificato in R e JAGS di come il modello t sopra menzionato sia più robusto rispetto alla 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