Intervalo De Confianza

"Scorings" para evaluar predicciones expresadas en términos de CIs

Ya he escrito bastante sobre scorings y métodos de evaluación de predicciones, particularmente las expresadas en términos probabilísticos. Los casos más habituales de estas últimas son el binario (en el que la predicción es una probabilidad en $[0,1]$) y el continuo en el que la predicción es una distribución de probabilidad.

Pero sucede en ocasiones que el predictor viene expresado por un intervalo de confianza (o varios, con niveles de significancia distintos).

¿Por qué es tan enrevesada la definición de intervalo de confianza?

En esta entrada voy a tratar de reconstruir históricamente el concepto de intervalo de confianza (IC) para tratar de explicar por qué el concepto ha llegado a tener una definición e interpretación tan precisa como confusa (e inútil). La interpretación de lo que realmente son los IC son el coco —el que se lleva a los diletantes que saben poco— con el que amenazar a quienes tienen inseguridades metodológicas y una marca de erudición incontestable para quienes son capaces de enunciarla sin que se les trabe la lengua.

Sobre la "inferencia basada en magnitudes"

Este artículo (sobre si los estadísticos se autoaplican el mismo rigor metodológico a la hora de seleccionar herramientas de análisis que luego exigen a otros) me llevó a este otro artículo donde se menciona una técnica, la inferencia basada en magnitudes, MBI en lo que sigue, por sus siglas en inglés, de la que trata lo que sigue.

Buscaban las autoras del segundo artículo un ejemplo de una técnica de esas que se publican en revistas de metodología estadística que acabara no teniéndose de pie. La encontraron en la MBI, que es una técnica:

Intervalos de confianza y la velocidad de la luz

La interpretación puramente frecuentista de los intervalos de confianza es que el 95% de ellos contendrán el valor de interés en cuestión. Veamos qué nos cuenta al respecto la historia de la medición de la velocidad de la luz contemplada a través de la lectura de Determining the Speed of Light (1676-1983): An Internalist Study in the Sociology of Science primero en forma tabular (nota: en la fuente original hay una tabla más extensa de la que esta es resumen),

Neyman y la definición original de los intervalos de confianza

Se atribuye a Neyman (y particular por su artículo de 1935 On the Problem of Confidence Intervals) la paternidad del concepto de intervalo de confianza. Aunque, leyéndolo y de acuerdo con las referencias bibliográficas de la cosa parece haber precedentes en el innombrable F (sí, el que osaba publicar en el también innombrable Journal of E.).

Lo interesante del tema es que, contrariamente a las reinterpretaciones posteriores, los define tal y como se le ocurrirían a un lego medianamente inteligente:

Misma p, distinto n, luego...

Tres situaciones. La primera:

n <- 20
y <- 15
test <- prop.test(y, n, p = .5)
test$p.value
# [1] 0.04417134
test$conf.int
# 0.5058845 0.9040674

La segunda:

n <- 200
y <- 115
test <- prop.test(y, n, p = 0.5)
test$p.value
#[1] 0.04030497
test$conf.int
# 0.5032062 0.6438648

Y la tercera:

n <- 2000
y <- 1046
test <- prop.test(y, n, p = 0.5)
test$p.value
#[1] 0.0418688
test$conf.int
# 0.5008370 0.5450738

En resumen:

  • mismo problema
  • distintos tamaños muestrales
  • mismo p-valor (aproximadamente)
  • distintos estimadores
  • distintos intervalos de confianza

La pregunta: ¿qué circunstancia es más favorable? Una respuesta, aquí.

Intervalos de confianza, intervalos de predicción

Contexto:

modelo <- lm(dist ~ speed, data = cars)

Intervalos de confianza:

head(predict(modelo, interval = "confidence"))
#        fit        lwr       upr
#1 -1.849460 -12.329543  8.630624
#2 -1.849460 -12.329543  8.630624
#3  9.947766   1.678977 18.216556
#4  9.947766   1.678977 18.216556
#5 13.880175   6.307527 21.452823
#6 17.812584  10.905120 24.720047

Intervalos de predicción:

head(predict(modelo, interval = "prediction"))
#        fit       lwr      upr
#1 -1.849460 -34.49984 30.80092
#2 -1.849460 -34.49984 30.80092
#3  9.947766 -22.06142 41.95696
#4  9.947766 -22.06142 41.95696
#5 13.880175 -17.95629 45.71664
#6 17.812584 -13.87225 49.49741

Creo que la diferencia (y el significado) es claro. Para todos los demás, esto.

La probabilidad de que el parámetro esté en el intervalo de confianza es .95

Si dices lo anterior, corres el riesgo de que un estadístico gruñón frunza mucho el ceño.

Hace muchos, muchos años, las gentes ávidas de saber más acudieron al tabernáculo donde se congregaban los sapientísimos estadísticos frecuentistas implorándoles una herramienta con que estimar el error de sus estimaciones puntuales. Estos cavilaron luengamente y décadas después entregaron a los representantes de los hombres, reunidos en el ágora, unas tablas de piedra que tenían grabadas a cincel la teoría de los intervalos de confianza. Pero, les advirtieron, los intervalos de confianza no son lo que vosotros queréis sino otra cosa y a quien ose interpretarlos torcidamente le pasará lo que a aquella señora que comió la manzana inadecuada: será expulsado del paraíso de la teoría como Dios manda.

"Intervalos" de confianza con forma de rosquilla

Envalentonado por el comentario de Iñaki Úcar a mi entrada del otro día, que me remitía a este artículo, decidí rizar el rizo y crear intervalos de confianza no ya discontinuos sino con otra propiedad topológica imposible: homeomorfos con un toro.

Y aquí está:

El modelo, el código y demás,

library(rstan)
library(ggplot2)

n <- 100

a1 <- 1
a2 <- 1
sigma <- 0.4

datos <- data.frame(x1 = rnorm(n, 2, 0.1),
                    x2 = rnorm(n, 2, 0.1))

datos$y <- a1^datos$x1 + a2^datos$x2 + rnorm(n, 0, sigma)

codigo <- "
data {
  int<lower=1> N;
  real y[N];
  real x1[N];
  real x2[N];
}

parameters {
  real<lower=-3, upper="3"> a1;
  real<lower=-3, upper="3"> a2;
  real<lower=0, upper="3"> sigma;
}

model {
  for (n in 1:N)
    y[n] ~ normal(fabs(a1)^x1[n] +
      fabs(a2)^x2[n], sigma);
}"

fit <- stan(model_code = codigo,
    data = list(N = length(datos$y), y = datos$y,
                x1 = datos$x1, x2 = datos$x2),
    iter=40000, warmup=2000,
    chains=1, thin=10)

res <- as.data.frame(fit)

ggplot(res, aes(x = a1, y = a2)) + geom_point(alpha = 0.1)

De nuevo, no son intervalos propiamente dichos, lo convengo. Pero son configuraciones más fieles al espíritu de lo que un intervalo de confianza es y representa que su(s) letra(s) I N T E R V A L O.

"Intervalos" de confianza creativos que excluyen el 0

Es el de b:

(A ver cuál es el primero de mis excolegas que protesta que pinto la unión de dos intervalos de confianza y no un intervalo propiamente dicho).

Ahora un poco más en serio: esta entrada se me ocurrió mientras pensaba en las distintas opciones existentes para crear intervalos de confianza, desde las canónicas (simétricos, de longitud mínima) a cualquier otra elección de algo que contenga la debida cantidad de probabilidad.

Una pregunta sobre pruebas de hipótesis

Más que pregunta, debería haberlo planteado como encuesta: no estoy preguntando sino preguntándote qué es lo que haces tú (habitualmente).

Va de pruebas de hipótesis (a la Fisher). La teoría dice que hay que plantear una hipótesis nula y para poder estudiar lo anómalos que son los datos obtenidos experimentalmente bajo dicha hipótesis. Es decir, calculas $latex P(X | H_0)$.

Alternativamente (en muchos contextos, no en todos: no sabría cómo hacerlo, p.e., con el ks.test) uno puede echarle un vistazo a los intervalos de confianza del parámetro de interés y ver si incluye o no el valor de referencia.

Y termino con lo de los intervalos

Y termino con lo de los intervalos. Me refiero a esto y esto.

Nunca me habría atrevido a escribir sobre el tema, y exponerme, de paso, a la muy razonadas explicaciones de quienes tuvieron a bien comentarlas, si no hubiese sido por un tema personal: el recuerdo de la frustración que me supuso hacerme en su día con la teoría subyacente tanto a las pruebas de hipótesis como a la construcción de intervalos de confianza.

Otra vuelta al caso del test que rechaza y el intervalo que contiene

Esta visita adicional al tema es consecuencia de mi revisión de todo el asunto de las pruebas de hipótesis. En particular, en el caso de prueba binomial, como en esta entrada, de la que la que lees es continuación.

En particular,

binom.test(79, 100, 0.7)

# Exact binomial test
#
# data:  79 and 100
# number of successes = 79, number of trials = 100, p-value = 0.04982
# alternative hypothesis: true probability of success is not equal to 0.7
# 95 percent confidence interval:
#   0.6970846 0.8650563
# sample estimates:
#   probability of success
# 0.79

es un caso en el que la prueba rechaza (al nivel de confianza del 5% siempre) y el intervalo de confianza del parámetro cubre el valor 0.7 de partida.