Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

5. Inferencia por aleatorización y bootstrap para la regresión (en espanol)

MATH 4210, Capítulo 5

5. Inferencia por aleatorización y bootstrap para la regresión

Un entrenador de fútbol americano quiere saber qué hace que un pateador patee lejos. Mide a trece pateadores universitarios en una serie de pruebas físicas: la fuerza de la pierna derecha y de la izquierda (en libras, en una máquina de prensa de piernas), la flexibilidad del tendón de la corva, una puntuación general de fuerza de piernas y el tiempo de suspensión. Para cada pateador también registra la distancia promedio de diez punts, en pies. La pregunta es fácil de plantear y difícil de responder con tan pocos pateadores: ¿una pierna más fuerte realmente compra más distancia, o el patrón que él observa podría ser una casualidad de trece atletas?

La Figure 1 grafica la distancia del punt contra la fuerza de la pierna derecha. La tendencia sube, y la recta ajustada trepa cerca de nueve décimas de pie por cada libra adicional de fuerza. Eso parece un efecto real. Pero trece puntos no son muchos. Las herramientas de inferencia del Capítulo 3, la prueba tt y su intervalo de confianza para la pendiente, descansan todas sobre una cadena de supuestos. O los errores son normales, o la muestra es lo bastante grande para que la aproximación normal nos salve. Con trece pateadores, ninguno de los dos está garantizado, y no hay forma de verificar la normalidad a partir de trece residuos con ninguna confianza.

Diagrama de dispersión de la distancia del punt en pies en el eje vertical contra la fuerza de la pierna derecha en libras en el eje horizontal para trece pateadores, con una recta de mínimos cuadrados que sube. La distancia crece desde unos 105 pies en las piernas más débiles cerca de 110 libras hasta unos 190 pies en las más fuertes cerca de 180 libras, y los trece puntos se dispersan alrededor de la recta.

Figure 1:Los trece pateadores, con la recta de mínimos cuadrados. La distancia sube con la fuerza de la pierna derecha a razón de unos 0.9 pies por libra, pero trece puntos hacen justo preguntarse si la pendiente es real o un accidente de una muestra pequeña.

Este capítulo responde la pregunta de otra manera. En lugar de suponer una forma para los errores, usa la computadora para mezclar y remuestrear los datos miles de veces y observa qué pasa. Dos ideas hacen el trabajo. Una prueba de permutación (Definición 5.1) rompe el vínculo entre predictor y respuesta mediante la mezcla, y luego pregunta con qué frecuencia el puro azar produce una pendiente tan pronunciada como la que se observó. El bootstrap (Definición 5.4) remuestrea los datos con reemplazo para ver cuánto rebotaría la pendiente si se pudiera recoger el estudio otra vez. Ambos reemplazan un supuesto frágil por un cálculo que siempre se puede ejecutar. Al final podrás construir cada uno desde cero, leer su salida y decir cuándo concuerda con las pruebas clásicas tt y FF y cuándo no.

5.1 Cuando la inferencia de teoría normal está sobre hielo delgado

Intuición

Cada prueba del Capítulo 3 venía con letra pequeña. Sus fórmulas dan respuestas exactas solo cuando los errores siguen una campana normal, o cuando la muestra es lo bastante grande para hacer sus veces. Con trece pateadores no tenemos ninguna de las dos, y esta sección muestra que ni siquiera podemos verificar la letra pequeña. Aquí está esa letra pequeña escrita en símbolos.

El Capítulo 3 construyó un intervalo de confianza para la pendiente como b1±ts{b1}b_1 \pm t^{\ast} \, s\{b_1\} y probó H0:β1=0H_0: \beta_1 = 0 con la razón t=b1/s{b1}t^{\ast} = b_1 / s\{b_1\}, comparándola con una distribución tt con n2n - 2 grados de libertad. Esa maquinaria es exacta solo cuando los errores εi\varepsilon_i son normales. Cuando no son normales, la razón tt sigue siendo aproximadamente tt-distribuida si la muestra es grande, porque una versión del teorema central del límite suaviza la estimación hacia la normalidad. El detalle está en la palabra grande. Con trece pateadores no hay rescate de muestra grande, y no hay forma de confirmar que los errores sean normales.

Podrías pensar que solo hay que verificar: ajusta la recta, grafica los trece residuos en un gráfico cuantil-cuantil normal, y observa si caen sobre una recta. El problema es que trece puntos son muy pocos para distinguir lo normal de lo no normal. La Figure 2 lo hace concreto. El panel superior izquierdo son los residuos reales del punting; los otros cinco son muestras genuinamente normales del mismo tamaño, generadas por la computadora. Cada una de ellas se dobla y serpentea alejándose de la recta. Si datos que se saben normales se ven tan torcidos con n=13n = 13, entonces un gráfico torcido de datos reales no te dice casi nada. El supuesto de normalidad sencillamente no es verificable aquí.

Seis gráficos cuantil-cuantil normales dispuestos en una rejilla de dos por tres, cada uno con trece puntos y una recta de referencia punteada. El superior izquierdo está etiquetado como residuos reales del punting; los otros cinco están etiquetados como muestras normales. Los seis muestran puntos que se apartan notablemente de la recta de referencia, con dobleces y huecos, incluso los que son verdaderamente normales.

Figure 2:Con n = 13, incluso datos que son genuinamente normales (los cinco paneles azules) producen un gráfico cuantil doblado y serpenteante. Así que el gráfico torcido de los residuos reales (arriba a la izquierda) no es evidencia contra la normalidad: trece puntos no pueden distinguir uno del otro. Por eso queremos una inferencia que no dependa de una verificación de normalidad.

La salida es dejar de suponer una distribución y empezar a generar una. Si podemos construir la distribución de la pendiente bajo algún mecanismo de azar claramente enunciado, usando solo los datos en mano, entonces podemos medir cuán sorprendente es la pendiente observada sin escribir jamás una densidad normal. Eso es lo que hace el resto del capítulo.

5.2 La prueba de permutación para la pendiente

Intuición

Aquí está la pregunta que hace una prueba de hipótesis, en palabras llanas: si la fuerza de la pierna no tuviera nada que ver con la distancia del punt, ¿con qué frecuencia el azar nos entregaría una pendiente tan pronunciada como 0.902? Para responderla necesitamos ver pendientes producidas por “nada sucediendo”. Las podemos fabricar. Mantén los trece valores de fuerza exactamente donde están, toma las trece distancias, y mézclalas de modo que cada distancia quede reasignada a un pateador al azar. Mezclar destruye cualquier vínculo real entre fuerza y distancia manteniendo intactas ambas columnas de números. Ajusta una recta a los datos mezclados y registra su pendiente. Esa pendiente es una muestra de “cómo se ve una pendiente cuando no hay asociación”.

La Figure 3 muestra una mezcla. A la izquierda, los datos reales suben. A la derecha, las mismas distancias reasignadas a fuerzas al azar dan una recta casi plana. Haz la mezcla miles de veces y obtienes miles de pendientes de no asociación: su histograma es la distribución nula de la pendiente, construida enteramente a partir de tus propios datos, sin fórmula y sin supuesto de normalidad.

Dos diagramas de dispersión lado a lado de la distancia del punt contra la fuerza de la pierna derecha. El panel izquierdo, etiquetado datos reales, muestra una recta que sube con pendiente 0.90. El panel derecho, etiquetado una remezcla, muestra las mismas distancias reasignadas a fuerzas al azar, con una recta ajustada casi plana de pendiente cercana a cero.

Figure 3:Mezclar las distancias contra las fuerzas fijas rompe el vínculo entre ambas, de modo que un ajuste remezclado tiene una pendiente cercana a cero. Repetir la mezcla miles de veces muestra qué pendientes puede producir el azar por sí solo.

Fórmula

La prueba de permutación para la pendiente trabaja con estas piezas. Sean los datos pares (Xi,Yi)(X_i, Y_i) para i=1,,ni = 1, \dots, n, y sea la pendiente de mínimos cuadrados observada

b1=i=1n(XiXˉ)(YiYˉ)i=1n(XiXˉ)2=SxySxx.b_1 = \frac{\sum_{i=1}^n (X_i - \bar X)(Y_i - \bar Y)}{\sum_{i=1}^n (X_i - \bar X)^2} = \frac{S_{xy}}{S_{xx}} .

En palabras: la pendiente es el producto cruzado de las desviaciones de XX y YY dividido entre la dispersión de XX, exactamente como en 2.2 Mínimos cuadrados desde los primeros principios. La hipótesis nula es

H0:X y Y no estaˊn relacionadas(en particular β1=0),H_0 : X \text{ y } Y \text{ no están relacionadas} \quad(\text{en particular } \beta_1 = 0),

y la alternativa es que sí están relacionadas (β10\beta_1 \neq 0). Una permutación es una remezcla π\pi de los valores de respuesta que empareja Yπ(i)Y_{\pi(i)} con XiX_i. Para cada permutación calcula la pendiente remezclada b1π=(XiXˉ)(Yπ(i)Yˉ)/Sxxb_1^{\pi} = \sum (X_i - \bar X)(Y_{\pi(i)} - \bar Y) / S_{xx}. El valor p de permutación de dos colas es la fracción de permutaciones cuya pendiente está al menos tan lejos de cero como la observada:

pperm=#{π:b1πb1}+1(nuˊmero de permutaciones)+1.p_{\text{perm}} = \frac{\#\{\pi : |b_1^{\pi}| \ge |b_1|\} + 1}{(\text{número de permutaciones}) + 1} .

En palabras: el valor p es con qué frecuencia una remezcla supera o empata a la pendiente real en tamaño, más uno por los datos reales mismos, dividido entre el número de intentos más uno. Hay n!n! permutaciones posibles, demasiadas para enumerar (13!13! supera los seis mil millones), así que extraemos BB de ellas al azar y usamos esas. El +1 adicional arriba y abajo cuenta el arreglo observado como una de las posibilidades, lo cual explicamos y justificamos a continuación.

Derivación (por qué la prueba de permutación es válida)

Demostración. Supón que H0H_0 se cumple en el sentido fuerte de que los valores de respuesta se adjuntaron a los valores del predictor sin tenerlos en cuenta en absoluto. Entonces el emparejamiento particular que observamos es solo una de las n!n! maneras igualmente probables de emparejar la colección fija de valores YY con los valores fijos XX. Cualquier estadístico calculado sobre un emparejamiento al azar, aquí la pendiente b1πb_1^{\pi}, tiene por tanto una distribución completamente conocida bajo H0H_0: asigna probabilidad 1/n!1/n! a cada uno de los n!n! arreglos. Esta es la distribución de permutación, y no necesita ningún supuesto sobre la forma de los errores. La normalidad nunca aparece.

Nuestra pendiente observada b1b_1 es el valor de un arreglo particular, así que bajo H0H_0 es una extracción de esa distribución de permutación. El valor p exacto de dos colas es la probabilidad nula de una pendiente al menos tan extrema en tamaño,

pexact=#{π:b1πb1}n!,p_{\text{exact}} = \frac{\#\{\pi : |b_1^{\pi}| \ge |b_1|\}}{n!} ,

que cuenta arreglos, incluyendo el observado (satisface b1πb1|b_1^{\pi}| \ge |b_1| con igualdad). Cuando n!n! es demasiado grande para enumerar, estimamos pexactp_{\text{exact}} extrayendo BB permutaciones al azar. Escribiendo MM para el número de esas BB extracciones con b1πb1|b_1^{\pi}| \ge |b_1|, el estimador

pperm=M+1B+1p_{\text{perm}} = \frac{M + 1}{B + 1}

añade el arreglo observado tanto al conteo como al total. Este +1 no es un truco. Mantiene honesta la prueba: los datos observados son ellos mismos un arreglo válido bajo H0H_0, así que pertenecen al conjunto de referencia, e incluirlos garantiza que ppermp_{\text{perm}} nunca pueda ser exactamente cero. Una prueba que pudiera reportar p=0p = 0 rechazaría H0H_0 con certeza sobre evidencia finita, lo cual nunca se justifica. Con el +1, el valor p más pequeño posible es 1/(B+1)1/(B+1), y se puede demostrar que la prueba resultante nunca rechaza una nula verdadera más a menudo que su nivel declarado. \blacksquare

Una consecuencia pulcra: como SxxS_{xx} y los XiX_i no cambian cuando mezclamos YY, la pendiente remezclada b1πb_1^{\pi} es simplemente Sxyπ/SxxS_{xy}^{\pi}/S_{xx}, una constante positiva fija por el producto cruzado remezclado SxyπS_{xy}^{\pi}. Así que permutar la pendiente es la misma prueba que permutar la correlación muestral, o permutar SxyS_{xy} mismo. Cualquiera que sea la versión monótona de “asociación” que prefieras, la prueba de permutación da el mismo valor p.

R

La prueba de permutación es un ciclo corto. Lee los datos, escribe una función de pendiente de una línea, calcula la pendiente observada, luego mezcla y reajusta BB veces. No se necesita ningún paquete más allá de R base.

punting <- read.csv("data/punting.csv")
dim(punting)
fit <- lm(Distance ~ RStr, data = punting)
round(summary(fit)$coefficients, 5)
[1] 13  7
            Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.00896   31.35922 0.47861  0.64159
RStr         0.90204    0.21003 4.29474  0.00127

El ajuste clásico da una pendiente de 0.902 pies por libra con un valor p de la prueba tt de 0.00127. Aférrate a ese número; la prueba de permutación producirá su propio valor p para compararlo con él. Ahora las piezas hechas desde cero.

slope <- function(x, y) {
  sum((x - mean(x)) * (y - mean(y))) / sum((x - mean(x))^2)
}
x <- punting$RStr
y <- punting$Distance
b1_obs <- slope(x, y)
b1_obs
[1] 0.9020383
set.seed(4210)
B <- 5000
perm_slopes <- numeric(B)
for (i in 1:B) {
  y_shuffled <- sample(y)              # shuffle distances, keep strengths fixed
  perm_slopes[i] <- slope(x, y_shuffled)
}
count_extreme <- sum(abs(perm_slopes) >= abs(b1_obs))
p_perm <- (count_extreme + 1) / (B + 1)
c(count_extreme = count_extreme, p_permutation = p_perm)
count_extreme p_permutation 
    4.0000000     0.0009998 

De 5000 remezclas, solo 4 produjeron una pendiente tan pronunciada como la real, así que el valor p de permutación es (4+1)/(5000+1)0.001(4+1)/(5000+1) \approx 0.001.

Python

El mismo ciclo en Python con NumPy. rng.permutation hace la mezcla; todo lo demás es un puñado de operaciones sobre arreglos.

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

punting = pd.read_csv("data/punting.csv")
print(punting.shape)
fit = smf.ols("Distance ~ RStr", data=punting).fit()
print(fit.summary().tables[1])
(13, 7)
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept     15.0090     31.359      0.479      0.642     -54.012      84.030
RStr           0.9020      0.210      4.295      0.001       0.440       1.364
==============================================================================
def slope(x, y):
    x = np.asarray(x, float)
    y = np.asarray(y, float)
    return np.sum((x - x.mean()) * (y - y.mean())) / np.sum((x - x.mean()) ** 2)

x = punting["RStr"].to_numpy()
y = punting["Distance"].to_numpy()
b1_obs = slope(x, y)
print(b1_obs)
0.9020382716049381
rng = np.random.default_rng(4210)
B = 5000
perm_slopes = np.empty(B)
for i in range(B):
    y_shuffled = rng.permutation(y)       # shuffle distances, keep strengths fixed
    perm_slopes[i] = slope(x, y_shuffled)
count_extreme = int(np.sum(np.abs(perm_slopes) >= abs(b1_obs)))
p_perm = (count_extreme + 1) / (B + 1)
print("count_extreme =", count_extreme, " p_permutation =", p_perm)
count_extreme = 5  p_permutation = 0.0011997600479904018

R y Python usan generadores de números aleatorios distintos, así que extraen mezclas distintas: R encontró 4 pendientes extremas y Python encontró 5, dando valores p de permutación de alrededor de 0.0010 y 0.0012. Los dos discrepan solo en el tercer decimal, que es ruido de Monte Carlo, y ambos apuntan a la misma conclusión clara.

La prueba de permutación se vuelve más creíble cuando tú mismo ves al azar producir unos cientos de pendientes y dónde cae 0.902 entre ellas, así que baraja antes de seguir.

Baraja las trece distancias de punt contra las fuerzas fijas, reajusta cada vez y observa cómo se construye la distribución nula de no asociación de la pendiente debajo del 0.902 observado.

Qué notar. Cada barajada conserva las mismas trece fuerzas y las mismas trece distancias, así que lo único que cambió es qué distancia acompañó a cuál pateador. Prueba esto. Presiona Correr 1000 tres veces, lee MM en el indicador, y luego calcula (M+1)/(B+1)(M+1)/(B+1) a mano y compáralo con el valor p que reporta el widget (5.2 La prueba de permutación para la pendiente).

5.3 Permutación sobre Toluca, y cómo se compara con la prueba t

El ejemplo del punting terminó en un cuasiempate entre los valores p de la permutación y de la prueba tt. Para ver los dos métodos en un caso donde la señal es abrumadora, regresa a los datos de la Toluca Company de los Capítulos 2 y 3: las horas de trabajo para producir una pieza contra el tamaño de lote, con la pendiente de mínimos cuadrados b1=3.5702b_1 = 3.5702 horas por unidad (2.2 Mínimos cuadrados desde los primeros principios). El Capítulo 3 probó esa pendiente con una prueba tt y encontró un valor p de alrededor de 4.45×10104.45 \times 10^{-10} (3.7 La prueba F y su equivalencia con la prueba t, donde las pruebas tt y FF coinciden para una sola pendiente). Ahora corremos la prueba de permutación sobre la misma pendiente y comparamos.

toluca <- read.csv("data/toluca.csv")
xt <- toluca$lotsize
yt <- toluca$hours
b1_toluca <- slope(xt, yt)
p_t <- summary(lm(hours ~ lotsize, data = toluca))$coefficients["lotsize", "Pr(>|t|)"]

set.seed(4210)
perm_toluca <- numeric(B)
for (i in 1:B) perm_toluca[i] <- slope(xt, sample(yt))
c(b1_toluca      = b1_toluca,
  perm_count     = sum(abs(perm_toluca) >= abs(b1_toluca)),
  max_perm_slope = max(abs(perm_toluca)),
  t_test_p_value = p_t)
     b1_toluca     perm_count max_perm_slope t_test_p_value 
  3.570202e+00   0.000000e+00   2.767172e+00   4.448828e-10 
toluca = pd.read_csv("data/toluca.csv")
xt = toluca["lotsize"].to_numpy()
yt = toluca["hours"].to_numpy()
b1_toluca = slope(xt, yt)
p_t = smf.ols("hours ~ lotsize", data=toluca).fit().pvalues["lotsize"]

rng = np.random.default_rng(4210)
perm_toluca = np.array([slope(xt, rng.permutation(yt)) for _ in range(B)])
print("b1_toluca      =", b1_toluca)
print("perm_count     =", int(np.sum(np.abs(perm_toluca) >= abs(b1_toluca))))
print("max_perm_slope =", np.max(np.abs(perm_toluca)))
print("t_test_p_value =", p_t)
b1_toluca      = 3.57020202020202
perm_count     = 0
max_perm_slope = 2.7454545454545456
t_test_p_value = 4.4488275871889375e-10

El piso 1/(B+1)1/(B+1) plantea una pregunta justa: ¿cuántas remezclas son suficientes? Como ppermp_{\text{perm}} es una estimación de Monte Carlo, tambalea de corrida a corrida cuando BB es pequeño y se asienta a medida que BB crece. La Figure 7 sigue el valor p corriente del punting contra el número de remezclas usadas, para tres semillas aleatorias distintas. Pasadas unas pocas miles de remezclas, las tres líneas casi han dejado de moverse, razón por la cual este capítulo usa B=5000B = 5000. Si necesitaras resolver un valor p cerca de un corte preciso, correrías más.

Tres curvas que muestran el valor p de permutación corriente para los datos del punting contra el número de remezclas en un eje logarítmico de 1 a 20000, una curva por semilla aleatoria. Las tres rebotan para conteos pequeños y convergen a aproximadamente 0.001 hacia unas pocas miles de remezclas, donde una línea vertical punteada marca 5000.

Figure 7:El valor p de permutación corriente del punting para tres semillas aleatorias. Cada estimación es ruidosa durante las primeras cientos de remezclas y se asienta cerca de 0.001 hacia unas pocas miles, la razón por la que B = 5000 es un valor por defecto razonable.

5.4 El bootstrap para la regresión

Intuición

Una prueba de permutación responde “¿hay un efecto?”. No te dice cuán grande es el efecto ni cuán precisa es tu estimación de él. Para eso queremos la distribución muestral de b1b_1: la dispersión de pendientes que verías si pudieras repetir todo el estudio muchas veces. No podemos repetir el estudio. El bootstrap finge la repetición usando la única muestra que tenemos, remuestreándola con reemplazo. La idea, debida a Bradley Efron, es que la muestra es nuestra mejor imagen de la población, así que extraer nuevas muestras de la muestra imita extraer nuevas muestras de la población.

Hay dos maneras naturales de remuestrear una regresión, y responden preguntas ligeramente distintas. La Figure 8 muestra ambas. El remuestreo de casos extrae filas enteras (Xi,Yi)(X_i, Y_i) con reemplazo, así que un pateador dado puede aparecer dos veces o ninguna, y el conjunto de valores de fuerza cambia de remuestra a remuestra. Esto trata a los pateadores como una muestra al azar de una población de pateadores. El remuestreo de residuos mantiene fijas las fuerzas y la recta ajustada, y luego construye una nueva respuesta sumando residuos remuestreados con reemplazo sobre los valores ajustados. Esto trata los valores de fuerza como fijos por diseño y pone toda la aleatoriedad en los errores, ajustándose más literalmente al modelo de regresión del Capítulo 2.

Dos diagramas de dispersión esquemáticos lado a lado sobre seis puntos. El panel izquierdo, remuestreo de casos, muestra algunos puntos dibujados como marcadores más grandes (seleccionados más de una vez) y un marcador hueco (no seleccionado), con la recta ajustada punteada. El panel derecho, remuestreo de residuos, muestra la recta ajustada fija con puntos sobre ella y flechas que mueven cada punto hacia arriba o hacia abajo por un residuo remezclado hasta un nuevo marcador cuadrado.

Figure 8:Los dos bootstraps para la regresión. El remuestreo de casos (izquierda) reextrae filas enteras, así que cuáles valores x aparecen cambia cada vez. El remuestreo de residuos (derecha) mantiene fijos los valores x y la recta ajustada y reasigna residuos remezclados, poniendo toda la aleatoriedad en los errores.

Fórmula

Ambos bootstraps repiten un ciclo de remuestrear y reajustar BB veces y juntan las pendientes. El algoritmo de remuestreo de casos es:

para b=1,,B:extrae (Xi,Yi) muestreando n filas con reemplazo, luego b1b=SxySxx.\text{para } b = 1, \dots, B: \quad \text{extrae } (X_i^{\ast}, Y_i^{\ast}) \text{ muestreando } n \text{ filas con reemplazo, luego } b_1^{\ast b} = \frac{S_{xy}^{\ast}}{S_{xx}^{\ast}} .

En palabras: reconstruye un conjunto de datos extrayendo nn filas al azar con repeticiones permitidas, y reajusta. El algoritmo de remuestreo de residuos fija XiX_i y el ajuste observado Y^i=b0+b1Xi\hat Y_i = b_0 + b_1 X_i con residuos ei=YiY^ie_i = Y_i - \hat Y_i:

para b=1,,B:Yi=Y^i+es(i),b1b=(XiXˉ)(YiYˉ)Sxx,\text{para } b = 1, \dots, B: \quad Y_i^{\ast} = \hat Y_i + e_{s(i)}^{\ast}, \quad b_1^{\ast b} = \frac{\sum (X_i - \bar X)(Y_i^{\ast} - \bar Y^{\ast})}{S_{xx}} ,

donde es(i)e_{s(i)}^{\ast} es un residuo extraído al azar con reemplazo de e1,,ene_1, \dots, e_n. En palabras: mantén la recta y las fuerzas, luego menea cada punto ajustado hacia arriba o hacia abajo por un residuo tomado prestado de algún lugar de los datos. El error estándar bootstrap de la pendiente es la desviación estándar de las pendientes juntadas,

sboot{b1}=1B1b=1B(b1bbˉ1)2,s_{\text{boot}}\{b_1\} = \sqrt{\frac{1}{B-1}\sum_{b=1}^{B}\left(b_1^{\ast b} - \bar b_1^{\ast}\right)^2} ,

la dispersión ordinaria de las BB pendientes remuestreadas. Estima cuánto variaría b1b_1 a través de estudios repetidos.

R

El remuestreo de casos es un ciclo que remuestrea índices de filas. Reutilizamos la función slope de antes.

set.seed(4210)
n <- nrow(punting)
boot_case <- numeric(B)
for (i in 1:B) {
  idx <- sample(n, n, replace = TRUE)  # resample whole rows
  boot_case[i] <- slope(x[idx], y[idx])
}
c(boot_mean = mean(boot_case), boot_SE = sd(boot_case))
boot_mean   boot_SE 
0.9045003 0.2485204 

El remuestreo de residuos mantiene x fija y reconstruye y a partir de los valores ajustados más residuos remuestreados.

b0_obs <- mean(y) - b1_obs * mean(x)
fitted_vals <- b0_obs + b1_obs * x
resid_obs <- y - fitted_vals

set.seed(4210)
boot_resid <- numeric(B)
for (i in 1:B) {
  y_star <- fitted_vals + sample(resid_obs, n, replace = TRUE)
  boot_resid[i] <- slope(x, y_star)
}
c(boot_mean = mean(boot_resid), boot_SE = sd(boot_resid))
boot_mean   boot_SE 
0.9020770 0.1976297 

Python

rng = np.random.default_rng(4210)
n = len(punting)
boot_case = np.empty(B)
for i in range(B):
    idx = rng.integers(0, n, n)           # resample whole rows
    boot_case[i] = slope(x[idx], y[idx])
print("boot_mean =", boot_case.mean(), " boot_SE =", boot_case.std(ddof=1))
boot_mean = 0.9099216280489136  boot_SE = 0.24681912512413196
b0_obs = y.mean() - b1_obs * x.mean()
fitted_vals = b0_obs + b1_obs * x
resid_obs = y - fitted_vals

rng = np.random.default_rng(4210)
boot_resid = np.empty(B)
for i in range(B):
    y_star = fitted_vals + rng.choice(resid_obs, n, replace=True)
    boot_resid[i] = slope(x, y_star)
print("boot_mean =", boot_resid.mean(), " boot_SE =", boot_resid.std(ddof=1))
boot_mean = 0.9009502801536351  boot_SE = 0.1951940681246211

El bootstrap de casos son cuatro líneas de código, pero la imagen de pateadores que aparecen dos veces y otros que desaparecen es lo que hace que el error estándar deje de ser una fórmula, así que extrae unos cuantos remuestreos a mano.

Remuestrea los trece pateadores con reemplazo, reajusta y observa cómo la distribución bootstrap de la pendiente se construye alrededor del 0.902 observado y no alrededor de cero.

Qué notar. Pon este histograma junto al de permutación: el montón nulo se sienta en cero porque barajar destruyó el efecto, mientras que el montón bootstrap se sienta en b1b_1 porque remuestrear lo conserva. Prueba esto. Corre 1000 tres veces y compara el error estándar bootstrap contra el 0.210 de la fórmula, y luego explica la diferencia con el conjunto cambiante de fuerzas (5.4 El bootstrap para la regresión).

5.5 Intervalos de confianza bootstrap

Intuición

Un error estándar es un solo número para la dispersión. Un intervalo de confianza es un rango que debería contener la pendiente verdadera β1\beta_1 con, digamos, 95%95\% de confianza. La distribución bootstrap de la pendiente ya contiene la información; solo tenemos que leer un intervalo de ella. Dos recetas simples hacen esto sin suponer que la distribución es normal (ambas se recogen en la Definición 5.7). El intervalo de percentiles toma el 95%95\% central de las pendientes bootstrap directamente. El intervalo básico (también llamado intervalo de reflexión) corrige un sesgo sutil reflejando los percentiles alrededor de la pendiente observada. Cuando la distribución bootstrap es simétrica casi coinciden; cuando es asimétrica se separan, y el intervalo básico suele ser el mejor comportado de los dos.

Fórmula

Sean qα/2q_{\alpha/2} y q1α/2q_{1-\alpha/2} los percentiles inferior y superior de las BB pendientes bootstrap, para un intervalo del 100(1α)%100(1-\alpha)\% (así α=0.05\alpha = 0.05 para el 95%95\%). Los dos intervalos son

percentil:(qα/2,  q1α/2),baˊsico:(2b1q1α/2,  2b1qα/2).\text{percentil:} \quad \big(q_{\alpha/2}, \; q_{1-\alpha/2}\big), \qquad\qquad \text{básico:} \quad \big(2 b_1 - q_{1-\alpha/2}, \; 2 b_1 - q_{\alpha/2}\big) .

En palabras: el intervalo de percentiles son simplemente los percentiles 2.5 y 97.5 de las pendientes remuestreadas; el intervalo básico refleja esos dos percentiles a través del doble de la pendiente observada. Nota que el intervalo básico intercambia los papeles de los dos percentiles, porque reflejar convierte la cola superior en el extremo inferior.

Ese intercambio es más fácil de ver que de decir. La Figure 11 lo dibuja. Piensa en la pendiente observada b1b_1 como un espejo parado en el medio. El intervalo de percentiles queda arriba; para obtener el intervalo básico reflejas cada extremo a través del espejo, de modo que el punto que estaba muy a la derecha aterriza muy a la izquierda y viceversa. La aritmética 2b1q2b_1 - q es exactamente “reflejar qq a través de b1b_1”: mide qué tan lejos queda qq de b1b_1 y da un paso de la misma distancia al otro lado.

Una distribución bootstrap esquemática de la pendiente sesgada a la derecha con una línea vertical verde en la pendiente observada b1 etiquetada como el espejo. Sobre la distribución, un intervalo de percentiles naranja va del percentil inferior q punto 025 al percentil superior q punto 975. Debajo, un intervalo básico violeta va de 2b1 menos q punto 975 a 2b1 menos q punto 025. Dos flechas grises curvas muestran el percentil derecho reflejándose a través de b1 para convertirse en el extremo básico izquierdo y el percentil izquierdo reflejándose para convertirse en el extremo básico derecho.

Figure 11:El intervalo básico es el intervalo de percentiles reflejado a través de la pendiente observada b1. Reflejar intercambia las colas: el percentil del extremo derecho se vuelve el extremo izquierdo y el percentil del extremo izquierdo se vuelve el extremo derecho. En una distribución sesgada como esta los dos intervalos quedan en lugares distintos; en una simétrica aterrizan uno sobre el otro.

Derivación (el intervalo básico bootstrap)

Demostración. El principio bootstrap dice que la variación de la pendiente remuestreada alrededor de la pendiente observada imita la variación de la pendiente observada alrededor de la pendiente verdadera. Escribe esto como: la distribución de b1b1b_1^{\ast} - b_1 aproxima la distribución de b1β1b_1 - \beta_1. Sean qα/2q_{\alpha/2} y q1α/2q_{1-\alpha/2} los percentiles de b1b_1^{\ast}, así que por definición

P(qα/2b1q1α/2)=1α.P\big(q_{\alpha/2} \le b_1^{\ast} \le q_{1-\alpha/2}\big) = 1 - \alpha .

Resta b1b_1 en todo para centrar en la pendiente observada:

P(qα/2b1b1b1q1α/2b1)=1α.P\big(q_{\alpha/2} - b_1 \le b_1^{\ast} - b_1 \le q_{1-\alpha/2} - b_1\big) = 1 - \alpha .

Ahora usa el principio bootstrap para reemplazar b1b1b_1^{\ast} - b_1 por b1β1b_1 - \beta_1, que tiene aproximadamente la misma distribución:

P(qα/2b1b1β1q1α/2b1)1α.P\big(q_{\alpha/2} - b_1 \le b_1 - \beta_1 \le q_{1-\alpha/2} - b_1\big) \approx 1 - \alpha .

Despeja las desigualdades para β1\beta_1. Restando b1b_1 y negando (lo cual invierte las direcciones de las desigualdades e intercambia los extremos) da

P(2b1q1α/2β12b1qα/2)1α.P\big(2 b_1 - q_{1-\alpha/2} \le \beta_1 \le 2 b_1 - q_{\alpha/2}\big) \approx 1 - \alpha .

Ese corchete es el intervalo básico. El intervalo de percentiles (qα/2,q1α/2)(q_{\alpha/2}, q_{1-\alpha/2}) es lo que obtienes si te saltas el paso de pivoteo y lees los percentiles bootstrap como si fueran percentiles de β1\beta_1 directamente. Los dos concuerdan exactamente cuando la distribución bootstrap es simétrica alrededor de b1b_1, porque entonces reflejar los percentiles a través de 2b12 b_1 los aterriza de vuelta sobre sí mismos. \blacksquare

R

perc_ci  <- quantile(boot_case, c(0.025, 0.975))
basic_ci <- c(2 * b1_obs - perc_ci[[2]], 2 * b1_obs - perc_ci[[1]])
t_ci     <- confint(fit)["RStr", ]
round(c(perc_lo = perc_ci[[1]], perc_hi = perc_ci[[2]]), 4)
round(c(basic_lo = basic_ci[1], basic_hi = basic_ci[2]), 4)
round(c(t_lo = t_ci[[1]], t_hi = t_ci[[2]]), 4)
perc_lo perc_hi 
 0.4158  1.3883 
basic_lo basic_hi 
  0.4158   1.3883 
  t_lo   t_hi 
0.4398 1.3643 

Python

perc_ci = np.quantile(boot_case, [0.025, 0.975])
basic_ci = np.array([2 * b1_obs - perc_ci[1], 2 * b1_obs - perc_ci[0]])
t_ci = fit.conf_int().loc["RStr"].to_numpy()
print("percentile", np.round(perc_ci, 4))
print("basic     ", np.round(basic_ci, 4))
print("classical ", np.round(t_ci, 4))
percentile [0.413  1.3824]
basic      [0.4216 1.3911]
classical  [0.4398 1.3643]

Figure 11 es una fotografía fija de la reflexión. El widget de abajo es la misma imagen con una manija: puedes sesgar tú mismo la distribución bootstrap y ver cómo los dos intervalos se separan.

Mueve a un pateador para sesgar la distribución bootstrap de casos de la pendiente, y observa cómo se separan el intervalo de percentiles y su reflexión a través de b1, el intervalo básico.

Qué notar. Las dos barras coinciden solo mientras el montón bootstrap es simétrico respecto al espejo en b1b_1; el sesgo es justo lo que las separa. Prueba esto. Arrastra al pateador más fuerte hasta 100 pies y luego verifica los extremos reportados contra 2b1q0.9752 b_1 - q_{0.975} y 2b1q0.0252 b_1 - q_{0.025} con una calculadora (5.5 Intervalos de confianza bootstrap).

5.6 Cuando la inferencia computacional y la clásica concuerdan

Ya conociste cada herramienta del capítulo. Antes de comparar sus respuestas, ayuda verlas en una sola página. La Figure 14 es un mapa: parte de tu pendiente ajustada y pregunta qué quieres saber, y luego te lleva al método correcto. La primera bifurcación es la grande. Si quieres saber si existe un efecto en absoluto, corres una prueba de permutación y reportas un valor p. Si quieres saber cuán precisa es tu estimación, corres un bootstrap y reportas un error estándar o un intervalo de confianza. El bootstrap luego se bifurca de nuevo según cómo se recogieron los datos: remuestreo de casos para sujetos muestreados al azar, remuestreo de residuos para un diseño con valores del predictor fijos.

Un diagrama de flujo de decisión. La caja superior dice tienes una pendiente ajustada b1, qué quieres saber. Se ramifica a la izquierda por una flecha etiquetada detectar hacia una caja verde hay algún efecto en absoluto, quieres un valor p, que baja hacia una caja de prueba de permutación mezcla Y contra X fijo reajusta junta pendientes, y luego hacia reportar p igual a M más 1 sobre B más 1. Se ramifica a la derecha por una flecha etiquetada medir hacia una caja naranja cuán preciso es el efecto, quieres un EE o IC, que lleva a una caja de bootstrap remuestrea con reemplazo reajusta toma la dispersión, que se bifurca a dos cajas, sujetos muestreados al azar dando remuestreo de casos reextrae filas enteras, y predictores fijos por diseño dando remuestreo de residuos fija la recta reasigna residuos, ambas llevando a reportar EE y un IC de percentiles o básico.

Figure 14:El capítulo en una página. La primera pregunta, detectar un efecto o medir su precisión, elige entre la prueba de permutación y el bootstrap; el bootstrap luego se divide según cómo surgieron los datos.

Ya has visto tres veredictos sobre la pendiente del punting (permutación, bootstrap, clásico) que apuntaron todos en la misma dirección, y una pendiente de Toluca donde concordaron hasta el piso de resolución de la prueba de permutación. Ese es el caso común: cuando los supuestos clásicos se cumplen aproximadamente, las respuestas computacional y clásica coinciden, y la concordancia es en sí misma evidencia de que el valor p clásico se puede confiar. Los métodos se ganan su lugar cuando los supuestos son inestables, porque entonces la respuesta por remuestreo no depende de esos supuestos.

Para ver la concordancia directamente, compara los errores estándar bootstrap y clásico sobre la pendiente de Toluca, donde n=25n = 25 y los datos son limpios.

set.seed(4210)
boot_toluca <- numeric(B)
nt <- length(xt)
for (i in 1:B) {
  idx <- sample(nt, nt, replace = TRUE)
  boot_toluca[i] <- slope(xt[idx], yt[idx])
}
classical_se <- summary(lm(hours ~ lotsize, data = toluca))$coefficients["lotsize", "Std. Error"]
c(bootstrap_SE = sd(boot_toluca), classical_SE = classical_se)
bootstrap_SE classical_SE 
   0.3765516    0.3469722 
rng = np.random.default_rng(4210)
nt = len(xt)
boot_toluca = np.empty(B)
for i in range(B):
    idx = rng.integers(0, nt, nt)
    boot_toluca[i] = slope(xt[idx], yt[idx])
classical_se = smf.ols("hours ~ lotsize", data=toluca).fit().bse["lotsize"]
print("bootstrap_SE =", boot_toluca.std(ddof=1), " classical_SE =", classical_se)
bootstrap_SE = 0.36568568108182364  classical_SE = 0.3469721568487608

Una lectura errónea a evitar: un estudiante ve el error estándar bootstrap 0.377 junto al clásico 0.347 y concluye “el bootstrap está mal, porque no coincide con la fórmula”. Eso lo entiende al revés. Ninguno de los dos números es la verdad; ambos estiman la misma desviación estándar desconocida de b1b_1, y difieren solo por ruido muestral y por la pequeña variabilidad extra que el remuestreo de casos incluye a propósito. La lectura correcta es que concuerdan lo bastante bien como para reforzarse mutuamente. Solo te preocuparías si discreparan por mucho, lo cual sería una señal de que los supuestos clásicos están fallando y el bootstrap te está diciendo algo que la fórmula no puede.

5.7 Resumen del capítulo

Ahora puedes hacer inferencia para una pendiente de regresión sin apoyarte en el supuesto de errores normales. Cuando una muestra pequeña pone las pruebas tt y FF sobre hielo delgado y trece residuos no pueden confirmar la normalidad, reemplazas el supuesto no verificable por un cálculo. Una prueba de permutación mezcla la respuesta contra el predictor fijo para construir la nula de no asociación de la pendiente y reporta pperm=(M+1)/(B+1)p_{\text{perm}} = (M+1)/(B+1); sobre los datos del punting dio 0.001\approx 0.001, coincidiendo con el clásico 0.00127. Un bootstrap remuestrea los datos con reemplazo para medir la precisión: el remuestreo de casos y el de residuos dieron errores estándar de la pendiente de alrededor de 0.249 y 0.198, e intervalos de percentiles y básico cerca de (0.42,1.39)(0.42, 1.39), todos consistentes con el clásico (0.440,1.364)(0.440, 1.364). La lección recurrente es que cuando las respuestas computacional y clásica concuerdan la concordancia genera confianza, y cuando divergen marcadamente esa divergencia es una advertencia sobre los supuestos.

Resultados clave de un vistazo.

ResultadoEnunciado o fórmulaVálido cuando
Prueba de permutación (Definición 5.1)Mezcla YY contra XX fijo, reajusta, junta pendientesNula de no asociación; cualquier distribución del error
Valor p de permutación (Definición 5.2)pperm=(M+1)/(B+1)p_{\text{perm}} = (M+1)/(B+1)MM de BB remezclas al menos tan extremas
Validez del valor p de permutación (Teorema 5.3)P(ppermα)αP(p_{\text{perm}} \le \alpha) \le \alpha; piso 1/(B+1)1/(B+1)Bajo la nula de no asociación
Bootstrap (Definición 5.4)Remuestrea con reemplazo, recalcula, toma la dispersiónLa muestra hace las veces de la población
Remuestreo de casos vs de residuos (Definición 5.5)Filas con reemplazo, o Y^i+es(i)\hat Y_i + e^{\ast}_{s(i)}Sujetos al azar, o predictor de diseño fijo
Error estándar bootstrap (Definición 5.6)sboot{b1}=sd(b11,,b1B)s_{\text{boot}}\{b_1\} = \operatorname{sd}(b_1^{\ast 1}, \dots, b_1^{\ast B})BB remuestras del modelo ajustado
Intervalos de percentiles / básico (Definición 5.7)(qα/2,q1α/2)(q_{\alpha/2}, q_{1-\alpha/2}) / (2b1q1α/2,2b1qα/2)(2b_1 - q_{1-\alpha/2}, 2b_1 - q_{\alpha/2})Leídos de la distribución bootstrap
Intervalo básico por pivoteo (Teorema 5.8)Refleja percentiles a través de 2b12b_1; igual al de percentiles si es simétricoEl principio bootstrap se cumple

Términos clave. Prueba de permutación, distribución de permutación, valor p de permutación, corrección de más uno, bootstrap, remuestreo de casos, remuestreo de residuos, error estándar bootstrap, intervalo de percentiles, intervalo básico bootstrap, intercambiabilidad.

Ahora deberías poder.

Dónde encaja esto. En la columna del flujo de trabajo de El flujo de trabajo del modelado, este capítulo vive en USAR: es inferencia, convirtiendo una pendiente ajustada en una afirmación defendible sobre el mundo. También es un discreto VERIFICAR, porque comparar las respuestas computacional y clásica audita los supuestos detrás de las clásicas. El Capítulo 3 dio la inferencia clásica tt y FF que supone errores normales; este capítulo dio la inferencia por remuestreo que no lo hace, y mostró que las dos concuerdan cuando los supuestos se cumplen. El bootstrap regresa más adelante como herramienta de trabajo: el Capítulo 9 recurre a él cuando los diagnósticos dicen que la normalidad ha fallado, y el Capítulo 12 usa la misma mentalidad de remuestrear y reajustar para validar modelos sobre datos con los que no fueron ajustados (12.4 Validación: entrenar, probar y validar cruzadamente). El hábito que construiste aquí, generar la distribución en lugar de suponerla, es uno que usarás por el resto del libro.

5.8 Preguntas frecuentes

P1. ¿Es una prueba de permutación lo mismo que un bootstrap? No, aunque ambos remuestrean. Una prueba de permutación mezcla sin reemplazo para romper el vínculo entre XX y YY, construyendo la distribución de un estadístico bajo la hipótesis nula de no asociación; responde “¿hay un efecto?”. El bootstrap remuestrea con reemplazo para imitar el muestreo repetido de la población, construyendo la distribución de la estimación misma; responde “¿cuán precisa es el efecto?”. Usa una prueba de permutación para un valor p, un bootstrap para un error estándar o intervalo de confianza.

P2. ¿Por qué mezclar sin reemplazo para la prueba de permutación pero con reemplazo para el bootstrap? La prueba de permutación necesita que cada remezcla sea un reordenamiento genuino de los mismos valores, de modo que represente uno de los emparejamientos igualmente probables bajo la nula; el muestreo sin reemplazo (una mezcla) hace exactamente eso. El bootstrap necesita que cada remuestra se vea como una extracción fresca de la población, y las muestras repetidas reales pueden contener repeticiones y omisiones, así que muestrea con reemplazo.

P3. ¿Cuántas remezclas o remuestras necesito? Las suficientes para que la respuesta deje de moverse. Para un valor p que comparas con 0.05, unas pocas miles de remezclas suele bastar; cerca de un corte preciso, usa más, porque el piso de Monte Carlo es 1/(B+1)1/(B+1) y el ruido encoge como 1/B1/\sqrt{B}. Para un error estándar bootstrap, 1000 a 2000 remuestras a menudo bastan; para los percentiles de cola de un intervalo de confianza, usa 5000 o más, ya que los cuantiles extremos son más ruidosos que el centro.

P4. Mi valor p de permutación es 0. ¿Reporto p=0p = 0? Nunca reportes exactamente cero. Si ninguna remezcla de BB superó tu estadístico, la corrección de más uno da pperm=1/(B+1)p_{\text{perm}} = 1/(B+1), y reportas “menor que” eso: para B=5000B = 5000, reporta p<0.0002p < 0.0002. Reportar p=0p = 0 afirmaría certeza infinita a partir de datos finitos.

P5. ¿Cuál bootstrap debo usar, de casos o de residuos? Ajusta el remuestreo a cómo surgieron los datos. Si los valores del predictor fueron fijados por diseño (un experimento planeado con dosis establecidas, o los tamaños de lote de Toluca elegidos por los programadores), el remuestreo de residuos ajusta el modelo literalmente. Si las filas son una muestra al azar de una población y el predictor es simplemente otra variable medida (los pateadores), el remuestreo de casos es más honesto. También es el valor por defecto más seguro cuando no estás seguro, porque captura la variabilidad en el predictor y no supone varianza del error constante.

P6. El bootstrap y la prueba tt dieron intervalos ligeramente distintos. ¿Cuál es el correcto? Ninguno es “el correcto” en un sentido absoluto; ambos estiman la misma incertidumbre verdadera. Cuando están cercanos, como en los ejemplos del punting y de Toluca, confía en cualquiera y nota la concordancia. Cuando difieren por mucho, la discrepancia es información: suele significar que un supuesto clásico (normalidad, varianza constante, sin puntos influyentes) está fallando, y el bootstrap libre de supuestos es el reporte más seguro mientras investigas.

P7. ¿Funcionan estos métodos para la regresión múltiple? Sí. El bootstrap se generaliza directamente: remuestrea por casos filas enteras, o remuestrea por residuos alrededor de la superficie ajustada, y junta el coeficiente que te importe. La permutación es más sutil con varios predictores, porque mezclar un predictor manteniendo fijos los otros requiere cuidado sobre qué nula estás probando, pero la idea central se traslada. Este capítulo se ciñe a la regresión simple para que la lógica quede visible; el código de remuestreo cambia poco cuando añades predictores.

5.9 Problemas de práctica

  1. (A) En una oración cada uno, enuncia qué pregunta responde una prueba de permutación y qué pregunta responde un bootstrap, y di cuál remuestrea con reemplazo.

  2. (A) Explica por qué trece residuos no pueden confirmar ni descartar errores normales, refiriéndote a la Figure 2.

  3. (A) Enuncia las hipótesis nula y alternativa de la prueba de permutación para una pendiente, en palabras y en símbolos.

  4. (A) ¿Por qué el valor p de permutación usa la corrección de más uno (M+1)/(B+1)(M+1)/(B+1) en lugar de M/BM/B? ¿Qué sale mal si una prueba puede reportar exactamente cero?

  5. (A) Una prueba de permutación con B=4999B = 4999 remezclas encuentra M=0M = 0. ¿Qué valor p reportas, y cuál es el valor p más pequeño que esta corrida podría dar jamás?

  6. (A) Describe en palabras la diferencia entre el remuestreo de casos y el remuestreo de residuos, y da una historia de recolección de datos que se ajuste a cada uno.

  7. (A) El intervalo de percentiles para una pendiente es (1.1,2.9)(1.1, 2.9) y la pendiente observada es b1=2.2b_1 = 2.2. Sin computadora, halla el intervalo básico.

  8. (A) Una compañera reporta un valor p de permutación de 0 para una pendiente. Reescribe su conclusión para que sea defendible, suponiendo que usó B=9999B = 9999 remezclas.

  9. (A) Explica por qué mezclar YY contra XX fijo, mezclar XX contra YY fijo, y mezclar ambos dan la misma prueba de permutación.

  10. (B) Muestra que cuando permutas la respuesta, la pendiente remezclada b1π=Sxyπ/Sxxb_1^{\pi} = S_{xy}^{\pi}/S_{xx} es una constante positiva fija por el producto cruzado remezclado SxyπS_{xy}^{\pi}, y concluye que la prueba de permutación sobre la pendiente es idéntica a la prueba de permutación sobre la correlación muestral.

  11. (B) Deriva el intervalo básico bootstrap (2b1q1α/2,2b1qα/2)(2b_1 - q_{1-\alpha/2}, \, 2b_1 - q_{\alpha/2}) (Teorema 5.8) a partir del principio bootstrap de que b1b1b_1^{\ast} - b_1 tiene aproximadamente la misma distribución que b1β1b_1 - \beta_1. Muestra cada paso del álgebra que invierte los extremos.

  12. (B) Demuestra que los intervalos de percentiles y básico coinciden exactamente cuando la distribución bootstrap de b1b_1^{\ast} es simétrica alrededor de b1b_1.

  13. (B) El valor p exacto de permutación de dos colas cuenta arreglos con b1πb1|b_1^{\pi}| \ge |b_1| de un total de n!n!. Explica por qué el arreglo observado siempre se cuenta, y usa esto para argumentar que el valor p exacto es al menos 1/n!1/n!.

  14. (B) Un estadístico TT tiene una distribución de permutación que asigna probabilidad 1/n!1/n! a cada arreglo. Explica por qué, bajo la nula, la variable aleatoria ppermp_{\text{perm}} (calculada de la enumeración completa) satisface P(ppermα)αP(p_{\text{perm}} \le \alpha) \le \alpha para cualquier corte α\alpha que sea múltiplo de 1/n!1/n!, de modo que la prueba controla su tasa de error (Teorema 5.3).

  15. (B) El error estándar de Monte Carlo de una estimación del error estándar bootstrap encoge como 1/B1/\sqrt{B}. Explica cualitativamente por qué duplicar la exactitud de un extremo de intervalo de confianza de cola cuesta cuatro veces las remuestras.

  16. (B) Explica por qué el error estándar del bootstrap de casos puede exceder el error estándar de la fórmula clásica incluso cuando el modelo es correcto, nombrando la fuente extra de variación que el remuestreo de casos incluye y que el bootstrap de residuos y la fórmula clásica mantienen fija.

  17. (C) Reproduce la prueba de permutación del punting en R o Python con set.seed(4210) / default_rng(4210) y B=5000B = 5000. Reporta el conteo de remezclas extremas y el valor p de permutación, y compáralo con el valor p de la prueba tt clásica 0.00127.

  18. (C) Repite la prueba de permutación del punting con el predictor LStr (fuerza de la pierna izquierda) en lugar de RStr. Reporta la pendiente observada, el valor p de permutación, y si tu conclusión cambia.

  19. (C) Corre la prueba de permutación de Toluca con B=5000B = 5000. Reporta la pendiente remezclada más grande en tamaño y explica por qué el valor p de permutación no puede bajar de 1/50011/5001 aquí.

  20. (C) Calcula los errores estándar del bootstrap de casos y de residuos de la pendiente del punting con B=5000B = 5000. Reporta ambos y explica cuál es mayor y por qué.

  21. (C) Calcula intervalos de percentiles y básico del 95%95\% para la pendiente del punting a partir del bootstrap de casos, y ponlos junto al intervalo tt clásico (0.440,1.364)(0.440, 1.364). Comenta la concordancia.

  22. (C) Usando los datos de punting y el predictor OStr (fuerza general de piernas), construye un intervalo bootstrap de percentiles del 90%90\% para la pendiente (usa los percentiles 5 y 95). Reporta el intervalo e interprétalo en las unidades del problema.

  23. (C) Aplica el bootstrap a la pendiente de Toluca 5000 veces por remuestreo de casos y compara el error estándar bootstrap con el clásico 0.347. Enuncia la diferencia porcentual y si los dos concuerdan.

  24. (C) Escribe una prueba de permutación para la pendiente del punting pero usa la correlación muestral como estadístico en lugar de la pendiente. Confirma que el valor p coincide con la prueba basada en la pendiente (problema 17), ilustrando la identidad del problema 10.

  25. (C) Aumenta la prueba de permutación del punting a B=50000B = 50000 remezclas. ¿Cambia materialmente la estimación del valor p respecto al valor con B=5000B = 5000? Reporta ambos y comenta el ruido de Monte Carlo.

  26. (C) Haz un gráfico cuantil-cuantil normal de los residuos del punting en R o Python, luego genera tres muestras normales de tamaño 13 y grafica sus gráficos cuantiles. Describe cuán difícil es distinguir los residuos reales de las muestras normales, conectando con la Figure 2.

  27. (C) Para la pendiente del punting, calcula un error estándar bootstrap y forma el intervalo b1±1.96sboot{b1}b_1 \pm 1.96 \, s_{\text{boot}}\{b_1\} (un intervalo bootstrap de aproximación normal). Compáralo con el intervalo de percentiles y explica cuándo discreparían los dos.

  28. (B) Un analista usa una mezcla emparejada: reordena las filas de los datos pero mantiene cada par (Xi,Yi)(X_i, Y_i) junto, y luego reajusta. Muestra que cada tal “permutación” da exactamente la pendiente observada, y explica por qué esto no prueba nada.

5.10 Práctica de examen

Estas cinco preguntas se ajustan al estilo de los exámenes del curso: cada una te pide explicar, evaluar o interpretar en oraciones completas, no solo calcular un número. Escribe tu propia respuesta antes de abrir la respuesta modelo. Un número correcto sin razonamiento ganaría poco crédito en el examen real, y una explicación clara con un pequeño desliz aritmético ganaría la mayor parte.

PE 5.1 (explica por qué). El capítulo llama a la prueba tt clásica para la pendiente del punting “sobre hielo delgado” con n=13n = 13, y sin embargo corre la prueba de permutación sobre esos mismos trece pateadores sin disculparse. Explica, en oraciones completas, exactamente cuál supuesto necesita la prueba tt que la de permutación no, y por qué tener solo trece pateadores hace que esa diferencia importe aquí en lugar de ser un tecnicismo.

PE 5.2 (interpreta una salida y una figura en contexto). Una prueba física distinta, el tiempo de suspensión (los segundos que el balón permanece en el aire), se usa para predecir la distancia del punt con el modelo Distance ~ Hang. El ajuste clásico y una prueba de permutación con B=5000B = 5000 (semilla 4210) dan:

Distance ~ Hang
             Estimate Std. Error  t value Pr(>|t|)
(Intercept) -22.32579   36.30608 -0.61493  0.55111
Hang         43.50138    9.19420  4.73139  0.00062

permutation test: 2 of 5000 reshuffles as extreme,  p_perm = (2+1)/(5000+1) = 0.0006
Histograma de 5000 pendientes remezcladas de la distancia del punt en regresión sobre el tiempo de suspensión, centrado cerca de cero y con rango aproximado de menos 40 a más 40 pies por segundo. Una línea vertical verde marca la pendiente observada 43.5 asentada fuera del borde derecho lejano del histograma, más allá de todas menos dos de las barras remezcladas, con una línea punteada tenue en su imagen espejo cerca de menos 43.5.

Figure 15:La distribución nula de permutación de la pendiente del tiempo de suspensión. Las pendientes remezcladas se agrupan alrededor de cero; la pendiente observada 43.5 queda fuera del borde derecho, superada por solo dos de 5000 remezclas, así que el valor p de permutación de dos colas es de alrededor de 0.0006.

Interpreta esta salida y figura en contexto. Enuncia qué significa la pendiente 43.5 en las unidades del problema, qué dicen los dos valores p y si concuerdan, y da una oración de precaución sobre lo que este análisis no establece.

PE 5.3 (un estudiante afirma algo, evalúalo). Un estudiante corre la prueba de permutación del punting (Distance ~ RStr, B=5000B = 5000) dos veces, una con set.seed(4210) y otra con set.seed(2026), y obtiene:

seed 4210:  M = 4 extreme reshuffles,  p_perm = 0.00100
seed 2026:  M = 8 extreme reshuffles,  p_perm = 0.00180

El estudiante concluye: “La prueba de permutación no es confiable, porque da una respuesta distinta cada vez que la corro. Debería simplemente reportar el valor p de la prueba tt clásica de 0.00127, que es exacto y reproducible.” Evalúa el razonamiento del estudiante. Di qué está bien y qué está mal en cada mitad de la afirmación.

PE 5.4 (un estudiante afirma algo, evalúalo). El ejemplo de RStr del capítulo encontró el error estándar del bootstrap de casos (0.249) mayor que el del bootstrap de residuos (0.198), y explicó que el remuestreo de casos “añade una fuente más de variabilidad”. Un estudiante lo convierte en regla: “El remuestreo de casos siempre da un error estándar mayor que el remuestreo de residuos, porque también deja variar los valores del predictor.” Para probar la regla reajustan la distancia del punt sobre la fuerza general de piernas (OStr) con B=5000B = 5000 y obtienen:

Distance ~ OStr
classical formula standard error   = 0.0991
case-resampling bootstrap SE       = 0.0889
residual-resampling bootstrap SE   = 0.0910

Evalúa la regla del estudiante a la luz de esta salida.

PE 5.5 (qué cambiaría si). Para la pendiente del punting Distance ~ RStr (observada b1=0.902b_1 = 0.902), responde cada parte en oraciones completas.

(a) El capítulo usa B=5000B = 5000 remezclas y reporta pperm0.001p_{\text{perm}} \approx 0.001. ¿Qué cambiaría sobre el número que podrías reportar honestamente si volvieras a correr la prueba de permutación con solo B=500B = 500 remezclas y de nuevo no encontraras ninguna remezcla que superara la pendiente observada?

(b) El capítulo remuestrea por casos a los pateadores porque se tratan como una muestra de una población mayor de pateadores. ¿Qué cambiaría sobre cuál bootstrap es la elección honesta si en cambio estos trece fueran el grupo entero que te importa, digamos la plantilla completa de un equipo, y solo quisieras describir la recta dentro de ese grupo fijo?

Juego del capítulo