Esta resposta analisa o significado da cotação e oferece os resultados de um estudo de simulação para ilustrá-la e ajudar a entender o que ela pode estar tentando dizer. O estudo pode ser facilmente estendido por qualquer pessoa (com R
habilidades rudimentares ) para explorar outros procedimentos de intervalo de confiança e outros modelos.
Duas questões interessantes surgiram neste trabalho. Uma delas diz respeito a como avaliar a precisão de um procedimento de intervalo de confiança. A impressão de robustez depende disso. Eu exibo duas medidas diferentes de precisão para que você possa compará-las.
A outra questão é que, embora uma confiança procedimento de intervalo de com baixa confiança possa ser robusto, os limites de confiança correspondentes podem não ser robustos. Intervalos tendem a funcionar bem porque os erros que cometem em uma extremidade frequentemente contrabalançam os erros que cometem na outra. Por uma questão prática, você pode ter certeza de que cerca de metade dos seus intervalos de confiança de estão cobrindo seus parâmetros, mas o parâmetro real pode estar consistentemente perto de um final específico de cada intervalo, dependendo de como a realidade se afasta das suposições do seu modelo.50 %
Robusto tem um significado padrão nas estatísticas:
A robustez geralmente implica insensibilidade a desvios de premissas em torno de um modelo probabilístico subjacente.
(Hoaglin, Mosteller e Tukey, Entendendo a análise de dados robusta e exploratória . J. Wiley (1983), p. 2.)
Isso é consistente com a cotação da pergunta. Para entender a cotação, ainda precisamos conhecer o objetivo pretendido de um intervalo de confiança. Para esse fim, vamos revisar o que Gelman escreveu.
Eu prefiro intervalos de 50% a 95% por 3 razões:
Estabilidade computacional,
Avaliação mais intuitiva (metade dos intervalos de 50% deve conter o valor verdadeiro),
Uma sensação de que, nas aplicações, é melhor ter uma noção de onde estarão os parâmetros e valores previstos, e não tentar uma quase certeza irrealista.
Como obter uma noção dos valores previstos não é o objetivo dos intervalos de confiança (ICs), vou me concentrar em obter uma sensação de valores parâmetros , que é o que os ICs fazem. Vamos chamar esses valores de "alvo". De onde, por definição, um IC deve cobrir seu objetivo com uma probabilidade especificada (seu nível de confiança). Atingir as taxas de cobertura pretendidas é o critério mínimo para avaliar a qualidade de qualquer procedimento de IC. (Além disso, podemos estar interessados em larguras típicas de IC. Para manter a postagem com um comprimento razoável, ignorarei esse problema.)
Essas considerações nos convidam a estudar o quanto um cálculo do intervalo de confiança pode nos induzir em erro quanto ao valor do parâmetro alvo. A cotação pode ser lida como sugerindo que os ICs de menor confiança podem manter sua cobertura mesmo quando os dados são gerados por um processo diferente do modelo. Isso é algo que podemos testar. O procedimento é:
Adote um modelo de probabilidade que inclua pelo menos um parâmetro. O clássico é a amostragem de uma distribuição Normal de média e variância desconhecidas.
Selecione um procedimento de IC para um ou mais dos parâmetros do modelo. Um excelente constrói o IC a partir da média da amostra e do desvio padrão da amostra, multiplicando o último por um fator fornecido pela distribuição t de Student.
Aplique esse procedimento a vários modelos diferentes - não se afastando muito do adotado - para avaliar sua cobertura em vários níveis de confiança.
50 %99,8 %
αp, então
registro( p1 - p) - log( α1 - α)
captura bem a diferença. Quando é zero, a cobertura é exatamente o valor pretendido. Quando negativo, a cobertura é muito baixa - o que significa que o IC é otimista demais e subestima a incerteza.
A questão, então, é como essas taxas de erro variam com o nível de confiança, à medida que o modelo subjacente é perturbado? Podemos responder plotando os resultados da simulação. Esses gráficos quantificam quão "irrealista" a "quase certeza" de um IC pode ser nesse aplicativo arquetípico.
( 1 / 30 de , 1 / 30 de ) (que é praticamente uma distribuição de Bernoulli). A distribuição lognormal é o exponencial da distribuição normal padrão. A distribuição normal é incluída para verificar se esse procedimento de IC realmente atinge a cobertura pretendida e para revelar quanta variação esperar do tamanho da simulação finita. (De fato, os gráficos para a distribuição normal estão confortavelmente próximos de zero, não mostrando desvios significativos.)
α95 %3
α = 50 %50 %95 %5 % com o tempo, devemos estar preparados para que nossa taxa de erro seja muito maior, caso o mundo não funcione exatamente como o modelo supõe.
50 %50 %
Este é o R
código que produziu os gráficos. É prontamente modificado para estudar outras distribuições, outras faixas de confiança e outros procedimentos de IC.
#
# Zero-mean distributions.
#
distributions <- list(Beta=function(n) rbeta(n, 1/30, 1/30) - 1/2,
Uniform=function(n) runif(n, -1, 1),
Normal=rnorm,
#Mixture=function(n) rnorm(n, -2) + rnorm(n, 2),
Exponential=function(n) rexp(n) - 1,
Lognormal=function(n) exp(rnorm(n, -1/2)) - 1
)
n.sample <- 12
n.sim <- 5e4
alpha.logit <- seq(0, 6, length.out=21); alpha <- signif(1 / (1 + exp(-alpha.logit)), 3)
#
# Normal CI.
#
CI <- function(x, Z=outer(c(1,-1), qt((1-alpha)/2, n.sample-1)))
mean(x) + Z * sd(x) / sqrt(length(x))
#
# The simulation.
#
#set.seed(17)
alpha.s <- paste0("alpha=", alpha)
sim <- lapply(distributions, function(dist) {
x <- matrix(dist(n.sim*n.sample), n.sample)
x.ci <- array(apply(x, 2, CI), c(2, length(alpha), n.sim),
dimnames=list(Endpoint=c("Lower", "Upper"),
Alpha=alpha.s,
NULL))
covers <- x.ci["Lower",,] * x.ci["Upper",,] <= 0
rowMeans(covers)
})
(sim)
#
# The plots.
#
logit <- function(p) log(p/(1-p))
colors <- hsv((1:length(sim)-1)/length(sim), 0.8, 0.7)
par(mfrow=c(1,2))
plot(range(alpha.logit), c(-2,1), type="n",
main="Confidence Interval Accuracies (Logit Scales)", cex.main=0.8,
xlab="Logit(alpha)",
ylab="Logit(coverage) - Logit(alpha)")
abline(h=0, col="Gray", lwd=2)
legend("bottomleft", names(sim), col=colors, lwd=2, bty="n", cex=0.8)
for(i in 1:length(sim)) {
coverage <- sim[[i]]
lines(alpha.logit, logit(coverage) - alpha.logit, col=colors[i], lwd=2)
}
plot(range(alpha), c(-0.2, 0.05), type="n",
main="Raw Confidence Interval Accuracies", cex.main=0.8,
xlab="alpha",
ylab="coverage-alpha")
abline(h=0, col="Gray", lwd=2)
legend("bottomleft", names(sim), col=colors, lwd=2, bty="n", cex=0.8)
for(i in 1:length(sim)) {
coverage <- sim[[i]]
lines(alpha, coverage - alpha, col=colors[i], lwd=2)
}