Sesión 16 (B) — Condicionar en \(\boldsymbol X\): la misma fórmula, dos experimentos
Índice
- Descripción de la práctica
- Actividad 1 - El mismo mundo, pero con doce viviendas
- Actividad 2 - Experimento A: el regresor se queda quieto
- Actividad 3 - Experimento B: el regresor también se sortea
- Actividad 4 - Las dos varianzas, cara a cara
- Actividad 5 - ¿Y si la muestra fuera grande?
- Preguntas de interpretación para la clase
- Código completo de la práctica
- Respuestas
Descripción de la práctica
Qué es condicionar en \(\boldsymbol X\) ya está definido con precisión: la lección 9 presentó \(E[Z\mid\boldsymbol X]\) como la proyección ortogonal de \(Z\) sobre las funciones de \(\boldsymbol X\), y la lección 11 trabajó con esa definición. Esta práctica busca otra cosa: la consecuencia observable de condicionar, es decir, qué cambia en los números cuando se condiciona y cuando no.
En la práctica A mantuvimos el regresor rooms fijo a lo largo de las 2000 réplicas, y solo dejamos cambiar la perturbación. Lo justificamos con una frase: ``eso es lo que significa condicionar en \(\boldsymbol X\)''. En la imagen de la matriz de copias de la lección 11 (apéndice, sección 3 (html)), condicionar en \(\boldsymbol X\) es mirar solo las columnas en las que los regresores toman los valores observados.
Esta práctica pone esa frase a prueba haciendo lo contrario. Vamos a repetir el mismo experimento de Montecarlo dos veces:
- Experimento A: el regresor se fija una vez y no cambia; solo cambia la perturbación.
- Experimento B: en cada réplica se sortea también un regresor nuevo.
Si la distinción fuera irrelevante, ambos experimentos darían lo mismo. Veremos que no.
Objetivos
- Comprobar que la fórmula \(Var[\hat\beta_2\mid\boldsymbol X]=\sigma^2/\sum_i(X_i-\overline{X})^2\) describe el experimento A, no el B.
- Ver qué consecuencia numérica concreta tiene el condicionamiento en \(Var[\cdot\mid\boldsymbol X]\), que las lecciones 9 y 11 ya definieron con precisión.
- Ver que la insesgadez, en cambio, se cumple en ambos experimentos, y entender por qué las dos propiedades se comportan de forma distinta.
- Apreciar por qué el resultado que reportan los programas estadísticos es siempre el condicional.
Advertencia de diseño. Para que la diferencia se vea con claridad, trabajaremos con una muestra deliberadamente pequeña: doce viviendas. Cuanto mayor es la muestra, menos importa la distinción que queremos ilustrar, y con las 506 observaciones de la práctica A costaría apreciarla. En la última actividad repetiremos el experimento con una muestra grande para comprobar precisamente eso.
Comandos nuevos de esta práctica. Todo el aparato es el de la práctica A: open, ols --quiet y sus accesores, loop --progressive, store y la apertura del fichero de réplicas con open "@workdir/…". Lo nuevo:
smpl 12 --random- elige al azar doce observaciones del conjunto de datos y restringe la muestra a ellas; a partir de ahí
$nobsvale 12 y las funciones sobre series actúan solo sobre esas doce. Conset seeddelante, siempre salen las mismas. sd(x)- desviación típica de una serie, con divisor \(n-1\) (sesión 7).
min(x),max(x)- mínimo y máximo de una serie.
- Bloques que empiezan con
open - cuando la salida de una actividad mezcla escalares teóricos y series de réplicas, los
printfvan en bloques distintos: el que calcula sobre las réplicas va precedido deopen "@workdir/…", que abre su fichero, y desde esa línea los escalares anteriores ya no existen. Por eso los valores teóricos se imprimen siempre antes.
Actividad 1 - El mismo mundo, pero con doce viviendas
Reutilizamos el mundo artificial de la práctica A (mismos \(\beta_1\), \(\beta_2\) y \(\sigma\)), pero nos quedamos solo con doce viviendas, elegidas al azar. Además, anotamos la media y la desviación típica de rooms en el conjunto completo: servirán de ``población'' de la que se sortean regresores nuevos en el experimento B.
Dos bloques. El primero repite el mundo artificial de la práctica A y añade dos escalares, la media y la desviación típica de rooms en las 506 viviendas, que servirán de población del regresor. El segundo imprime esa población, restringe la muestra a doce viviendas con smpl 12 --random (después de set seed 160, para que sean siempre las mismas doce) y calcula sobre ellas Sxx_obs, la suma de cuadrados en desviaciones, y var_cond, la varianza que predice la lección 11. El «Sxx típico» que también se imprime es \((n-1)\) veces la varianza poblacional del regresor: lo que cabría esperar de doce viviendas cualesquiera.
en línea de comandos:
open hprice2.gdt --quiet ols price const rooms --quiet scalar b1_true = $coeff(const) scalar b2_true = $coeff(rooms) scalar sigma = sqrt($ess/$df) scalar mu_r = mean(rooms) # "poblacion" del regresor scalar sd_r = sd(rooms)
printf "Poblacion del regresor: media = %.4f desv. tipica = %.4f\n", mu_r, sd_r set seed 160 smpl 12 --random # doce viviendas elegidas AL AZAR scalar Sxx_obs = sum((rooms-mean(rooms))^2) scalar var_cond = sigma^2 / Sxx_obs printf "\nSubmuestra observada (n = %d):\n", $nobs printf " media(rooms) = %.4f desv. tipica(rooms) = %.4f\n", mean(rooms), sd(rooms) printf " Sxx = suma de cuadrados en desviaciones = %.4f\n", Sxx_obs printf " Sxx tipico de una muestra de este tamano = %.4f\n", ($nobs-1)*sd_r^2 printf "\nVar[b2 | X] que predice la leccion 11 = %.1f (desv. tipica %.1f)\n", var_cond, sqrt(var_cond)
Poblacion del regresor: media = 6,2841 desv. tipica = 0,7026 Submuestra observada (n = 12): media(rooms) = 6,3917 desv. tipica(rooms) = 0,5450 Sxx = suma de cuadrados en desviaciones = 3,2670 Sxx tipico de una muestra de este tamano = 5,4300 Var[b2 | X] que predice la leccion 11 = 13417907,5 (desv. tipica 3663,0)
Recuerde que Sxx es la abreviatura que introdujimos en la práctica A para \(\sum_i(x_i-\mu_{\boldsymbol x})^2\): el cuadrado de la norma euclídea del vector en desviaciones del regresor, o equivalentemente \(n\,S^2\) (evaluada sobre la muestra aleatoria, es el \(\sum_i(X_i-\overline X)^2\) de la lección 11). No es notación del curso, solo una comodidad para los guiones.
Dos detalles del código merecen comentario. El primero es smpl 12 --random: elegimos las doce viviendas al azar, en lugar de tomar las doce primeras. Es importante, porque hprice2 viene ordenado por distritos censales y las primeras viviendas se parecen mucho entre sí; tomarlas directamente nos daría una submuestra atípica por un motivo ajeno a lo que queremos estudiar. El segundo es set seed, que fija qué doce viviendas salen, para que el resultado sea reproducible.
Compare ahora las dos últimas cifras: el Sxx de nuestras doce viviendas y el Sxx que cabría esperar de doce viviendas cualesquiera. Esa comparación explica los resultados que siguen.
Actividad 2 - Experimento A: el regresor se queda quieto
Es el experimento de la práctica A, sin más cambio que el tamaño muestral. El bucle es el de la práctica A con R = 4000 réplicas y la muestra de doce viviendas: cada vuelta sortea la perturbación, construye y, estima con ols --quiet y guarda el coeficiente b_fijo como una fila más de repFijo.gdt.
en línea de comandos:
scalar R = 4000
set seed 160
loop R --progressive --quiet
series u = normal(0, sigma)
series y = b1_true + b2_true*rooms + u # rooms NO cambia
ols y const rooms --quiet
scalar b_fijo = $coeff(rooms)
store "@workdir/repFijo.gdt" b_fijo
endloop
Actividad 3 - Experimento B: el regresor también se sortea
Ahora añadimos una línea dentro del bucle: antes de construir el regresando, sorteamos un regresor nuevo. Conceptualmente estamos diciendo ``no solo podría haber sido otra la perturbación; también podrían haber sido otras las doce viviendas''. En el código, la línea nueva es series xnew = mu_r + sd_r*normal(0,1): doce sorteos de una normal estándar, reescalados a la media y la desviación típica de la población del regresor. Después y se construye con xnew, la regresión se estima sobre xnew, y store guarda dos escalares por réplica, el coeficiente b_var y Sxx_i, la suma de cuadrados en desviaciones del regresor de esa réplica, en repVar.gdt.
en línea de comandos:
set seed 160
loop R --progressive --quiet
series xnew = mu_r + sd_r*normal(0,1) # doce viviendas NUEVAS
series u = normal(0, sigma)
series y = b1_true + b2_true*xnew + u
ols y const xnew --quiet
scalar b_var = $coeff(xnew)
scalar Sxx_i = sum((xnew-mean(xnew))^2) # el Sxx de ESTA replica
store "@workdir/repVar.gdt" b_var Sxx_i
endloop
Guardamos también Sxx_i, la suma de cuadrados en desviaciones del regresor de cada réplica. En el experimento A ese número era una constante; aquí es una variable aleatoria más, y en ella está la diferencia entre los dos experimentos.
Actividad 4 - Las dos varianzas, cara a cara
Tres bloques de printf, cada uno con su salida. El primero usa los escalares teóricos. El segundo va precedido de AbrirRepFijo, que abre repFijo.gdt, y calcula la media y la varianza (divisor \(n\)) de b_fijo. El tercero va precedido de AbrirRepVar, que abre repVar.gdt, y hace lo mismo con b_var y añade, con mean, min y max, el recorrido de Sxx_i a lo largo de las réplicas.
en línea de comandos:
printf "=== LO QUE PREDICE LA LECCION 11 (condicional en la X observada) ===\n" printf "beta_2 verdadero = %.2f\n", b2_true printf "Var[b2 | X] = %.1f\n\n", var_cond
=== LO QUE PREDICE LA LECCION 11 (condicional en la X observada) === beta_2 verdadero = 9119,55 Var[b2 | X] = 13417907,5
open "@workdir/repFijo.gdt" --quiet
printf "=== EXPERIMENTO A: regresor FIJO ===\n" printf "media de b2hat = %.2f\n", mean(b_fijo) printf "varianza de b2hat = %.1f\n\n", sum((b_fijo-mean(b_fijo))^2)/$nobs
=== EXPERIMENTO A: regresor FIJO === media de b2hat = 9061,70 varianza de b2hat = 13168607,8
open "@workdir/repVar.gdt" --quiet
printf "=== EXPERIMENTO B: regresor REGENERADO en cada replica ===\n" printf "media de b2hat = %.2f\n", mean(b_var) printf "varianza de b2hat = %.1f\n", sum((b_var-mean(b_var))^2)/$nobs printf "\nSxx a lo largo de las replicas del experimento B:\n" printf " medio = %.4f minimo = %.4f maximo = %.4f\n", mean(Sxx_i), min(Sxx_i), max(Sxx_i)
=== EXPERIMENTO B: regresor REGENERADO en cada replica === media de b2hat = 9125,59 varianza de b2hat = 9747173,3 Sxx a lo largo de las replicas del experimento B: medio = 5,4482 minimo = 0,7178 maximo = 19,0432
Lo que debe observar
Tres hechos, en este orden:
- El experimento A reproduce la fórmula. La varianza empírica de las estimaciones con el regresor fijo queda cerca de \(\sigma^2/\mathrm{Sxx}\), calculado con el Sxx de nuestras doce viviendas. La fórmula de la lección 11 describe este experimento.
- El experimento B da otro resultado. Con el regresor regenerado, la varianza es apreciablemente distinta. Los dos experimentos responden a preguntas diferentes.
- Las medias, en cambio, coinciden. En ambos experimentos la media de las estimaciones queda cerca de \(\beta_2\). La insesgadez se cumple en los dos diseños; la fórmula de la varianza, no.
De dónde viene la diferencia
Mire la última línea de la salida: el recorrido de Sxx_i a lo largo de las réplicas del experimento B. Verá que ese número varía considerablemente de una réplica a otra, y compárelo con el Sxx fijo de nuestras doce viviendas observadas.
En el experimento A la varianza de \(\hat\beta_2\) es \(\sigma^2\) dividido por un número fijo. En el experimento B es, en promedio, \(\sigma^2\) multiplicado por el promedio de \(1/\mathrm{Sxx}\), y el promedio de un cociente no es el cociente de los promedios. Si nuestras doce viviendas concretas resultan tener valores de rooms menos dispersos de lo habitual, su Sxx será menor que el típico y, en consecuencia, condicionar en ellas dará una varianza mayor que la que resulta de promediar sobre todos los conjuntos posibles de doce viviendas. Si hubieran salido más dispersas, ocurriría lo contrario.
Esta es la razón por la que la lección 11 se detuvo en la fórmula condicional y solo mencionó brevemente la incondicional: al intentar calcular \(\mathrm{Var}(\hat\beta_2)\) aparecía \(\mathrm{E}\big(\sigma^2/(nS^2)\big)\), la esperanza de un cociente, que no se simplifica.
Actividad 5 - ¿Y si la muestra fuera grande?
Repita el experimento con cuatrocientas viviendas en lugar de doce, dejando todo lo demás igual. Cuatro bloques. El primero realiza todos los pasos: reabre hprice2 y recupera los escalares (se perdieron al abrir los ficheros de réplicas), toma cuatrocientas viviendas con smpl 400 --random, y ejecuta un solo bucle de 40 000 vueltas que hace los dos experimentos a la vez: primero con rooms fijo (coeficiente bg_fijo) y después con un regresor nuevo xnew y una perturbación nueva u2 (coeficiente bg_var); store guarda los dos por réplica en repGrande.gdt. Tarda bastante más que los bucles anteriores. El segundo imprime las cifras teóricas; el tercero, AbrirRepGrande, abre repGrande.gdt, y el cuarto imprime las dos varianzas empíricas y su cociente.
en línea de comandos:
open hprice2.gdt --quiet
ols price const rooms --quiet
scalar b1_true = $coeff(const)
scalar b2_true = $coeff(rooms)
scalar sigma = sqrt($ess/$df)
scalar mu_r = mean(rooms)
scalar sd_r = sd(rooms)
set seed 160
smpl 400 --random
scalar Sxx_obs = sum((rooms-mean(rooms))^2)
scalar var_cond = sigma^2 / Sxx_obs
set seed 160
loop 40000 --progressive --quiet # diez veces mas replicas: ver nota
series u = normal(0, sigma)
series y = b1_true + b2_true*rooms + u
ols y const rooms --quiet
scalar bg_fijo = $coeff(rooms)
series xnew = mu_r + sd_r*normal(0,1)
series u2 = normal(0, sigma)
series y2 = b1_true + b2_true*xnew + u2
ols y2 const xnew --quiet
scalar bg_var = $coeff(xnew)
store "@workdir/repGrande.gdt" bg_fijo bg_var
endloop
printf "Con n = 400: Sxx observado = %.2f (tipico: %.2f)\n", Sxx_obs, ($nobs-1)*sd_r^2 printf " Var[b2|X] condicional teorica = %.2f\n", var_cond printf " cociente Sxx observado/tipico = %.3f <- lo que cabe esperar de var_B/var_A\n", Sxx_obs/(($nobs-1)*sd_r^2)
Con n = 400: Sxx observado = 205,76 (tipico: 196,96)
Var[b2|X] condicional teorica = 213046,34
cociente Sxx observado/tipico = 1,045 <- lo que cabe esperar de var_B/var_A
open "@workdir/repGrande.gdt" --quiet
printf " regresor FIJO : var = %.2f\n", sum((bg_fijo-mean(bg_fijo))^2)/$nobs printf " regresor REGENERADO : var = %.2f\n", sum((bg_var-mean(bg_var))^2)/$nobs printf " cociente observado : %.3f\n", (sum((bg_var-mean(bg_var))^2))/(sum((bg_fijo-mean(bg_fijo))^2))
regresor FIJO : var = 214203,96 regresor REGENERADO : var = 224464,19 cociente observado : 1,048
Lo que debe observar
Lo primero que conviene mirar no es el tamaño de la diferencia, sino su signo.
Con doce viviendas, la varianza del experimento B salía menor que la del A. Con cuatrocientas sale mayor. Es la confirmación del mecanismo que explicamos en la Actividad 4. Allí dijimos que todo dependía de si nuestra muestra concreta tenía un Sxx más pequeño o más grande que el típico, y añadimos: ``si hubieran salido más dispersas, ocurriría lo contrario''. Compruébelo en las salidas:
- Doce viviendas: Sxx observado \(=3{,}27\) frente a un típico de \(5{,}43\). Nuestra muestra estaba poco dispersa, condicionar en ella daba una varianza mayor que el promedio, y por eso B quedaba por debajo de A.
- Cuatrocientas viviendas: Sxx observado \(=205{,}76\) frente a un típico de \(196{,}96\). Ahora la muestra está, ligeramente, más dispersa de lo típico; condicionar en ella da una varianza menor que el promedio, y B queda por encima de A.
El cambio de signo es la predicción cumplida. Y descarta una conclusión falsa que sería fácil extraer de la Actividad 4, ``condicionar infla la varianza'': condicionar no la aumenta ni la reduce sistemáticamente, la ajusta a la muestra que tenemos, y hacia qué lado la ajuste depende de cómo sea esa muestra.
En cuanto al tamaño, la diferencia se reduce mucho al pasar de doce a cuatrocientas observaciones, pero no llega a desaparecer. Conviene entender por qué, porque en esa distinción hay dos efectos superpuestos:
- Nuestra muestra deja de ser excepcional. Con doce viviendas, el Sxx de la muestra observada podía quedar muy lejos del típico; con cuatrocientas, cualquier muestra tiene un Sxx bastante parecido al típico. Este efecto se atenúa al crecer \(n\), pero lentamente.
- El promedio de un cociente no es el cociente de los promedios. Aunque el Sxx medio coincidiera con el observado, promediar \(\sigma^2/\mathrm{Sxx}\) sobre las réplicas no daría \(\sigma^2\) dividido por el Sxx medio. Este segundo efecto también se atenúa con \(n\), y más deprisa que el primero.
Con \(n=400\) el segundo efecto ya es prácticamente inapreciable, y todo lo que queda es el primero. Eso se puede comprobar con las cifras de la salida: el cociente de varianzas que observamos debería parecerse al cociente Sxx observado/típico, que la salida imprime, y en efecto se le parece.1
La conclusión práctica es que con muestras grandes la distinción tiene poca consecuencia numérica. La conclusión conceptual, en cambio, no cambia en absoluto: siguen siendo dos preguntas distintas, y la que responde la fórmula de la lección 11, y también su programa estadístico, es siempre la condicional.
Preguntas de interpretación para la clase
- ¿Qué pregunta responde el experimento A y qué pregunta, distinta, responde el experimento B? Formule ambas con palabras, sin fórmulas.
- ¿Por qué la insesgadez se cumple en los dos experimentos, mientras que la fórmula de la varianza solo describe el primero? (Pista: ¿en qué paso de la demostración de la lección 11 interviene \(\boldsymbol X\) de forma esencial?)
- Cuando Gretl le muestra el error estándar de un coeficiente, ¿está respondiendo a la pregunta del experimento A o a la del B? ¿Por qué cree que es así?
- Imagine que un investigador diseña el experimento y puede elegir los valores del regresor (por ejemplo, las dosis en un ensayo). A la vista de la fórmula de la lección 11, ¿qué le convendría hacer con esas dosis?
- En la Actividad 5, con \(n=400\), las dos varianzas casi coinciden. ¿Diría entonces que la distinción entre condicionar y no condicionar es irrelevante en la práctica? Argumente a favor y en contra.
Para profundizar:
- Lección 11 (lección 11), sección ``Varianza'', en particular el párrafo final sobre la varianza incondicional y la ley de la varianza total.
- Lección 9 (lección 9) para la esperanza condicional como proyección.
- Wooldridge, J. M. (2020). Introductory Econometrics, cap. 2, sección 2.5.
Código completo de la práctica
| Enlace al guión: | S16-Prct-B-condicionar.inp |
Respuestas
- Las dos preguntas. El experimento A pregunta: ``dadas estas doce viviendas, con estos valores concretos de
rooms, ¿cuánto variaría mi estimación si el azar hubiera repartido otras perturbaciones?''. El experimento B pregunta algo más amplio: ``¿cuánto variaría mi estimación entre todos los estudios posibles de doce viviendas, considerando que también podrían haber sido otras las viviendas?''. La primera toma la muestra de regresores como un dato del problema; la segunda la considera parte de lo que podría haber sido distinto. - Por qué la insesgadez se mantiene. Porque la demostración de la insesgadez pasa por \(E[\hat\beta_2\mid\boldsymbol X]=\beta_2\,\mathit 1\) y después aplica la ley de las esperanzas iteradas: el resultado condicional no depende de \(\boldsymbol X\), es la misma constante sea cual sea la matriz de regresores, y por tanto su promedio sobre todas las \(\boldsymbol X\) posibles vuelve a ser esa constante. Con la varianza ocurre lo contrario: \(Var[\hat\beta_2\mid\boldsymbol X]=\sigma^2/\mathrm{Sxx}\) sí depende de \(\boldsymbol X\), así que promediar sobre las \(\boldsymbol X\) posibles da un número distinto del que corresponde a una \(\boldsymbol X\) concreta.
- Lo que reporta Gretl. Responde a la pregunta del experimento A: el error estándar se calcula con la matriz de regresores efectivamente observada, sustituyendo \(\sigma^2\) por su estimación \(\mathfrak s^2\). Tiene sentido que sea así por dos motivos. Uno práctico: no conocemos la distribución de la que salieron los regresores, así que no podríamos promediar sobre ella aunque quisiéramos. Y otro conceptual: la pregunta que le interesa a quien analiza unos datos es cuánta confianza merece su estimación, con su muestra, no cuánta merecería en promedio un estudio hipotético que nunca hizo.
- Si se pueden elegir los valores del regresor. La fórmula dice que la varianza es \(\sigma^2\) dividido por \(\sum_i(X_i-\overline{X})^2\). Conviene, por tanto, hacer ese denominador lo más grande posible: elegir dosis muy separadas entre sí, en los extremos del rango admisible, en lugar de concentrarlas en torno a un valor central. Es el mismo principio que hemos visto en sentido contrario en esta práctica: nuestras doce viviendas tenían valores de
roomspoco dispersos, y eso aumentaba la varianza de la estimación. (Naturalmente, esto supone que el modelo lineal es válido en todo ese rango: separar mucho las dosis mejora la precisión, pero solo si la relación sigue siendo lineal allí.) - ¿Es irrelevante con \(n\) grande? A favor de que lo es: numéricamente las dos varianzas se acercan mucho (la diferencia pasa de ser enorme con doce observaciones a ser modesta con cuatrocientas), así que a efectos de calcular un error estándar la distinción cambia poco las cifras. En contra: primero, ``\(n\) grande'' no siempre se tiene, y con muestras pequeñas, que abundan en economía aplicada, la diferencia es la que hemos visto. Segundo, la distinción no es solo numérica, sino conceptual: aclara qué población de muestras estamos imaginando cuando decimos que un estimador ``varía''. Confundir ambas preguntas lleva a interpretar mal qué significa exactamente un error estándar.
Notas al pie de página:
Aquí hemos subido el número de réplicas de \(4\,000\) a \(40\,000\), y merece la pena decir por qué: con \(4\,000\) réplicas el ruido de Montecarlo sobre un cociente de varianzas supera el \(3\%\), del mismo orden que el efecto de un \(4{,}5\%\) que queremos medir. Repitiendo el experimento con distintas semillas, el cociente oscilaba entre \(1{,}00\) y \(1{,}08\); con algunas semillas el efecto parecía desaparecer del todo. Con \(40\,000\) réplicas el cociente se estabiliza por encima de uno y el experimento ilustra lo que pretende ilustrar. El coste es de unos pocos segundos. Un experimento simulado tiene su propia precisión, y conviene asegurarse de que es mejor que el efecto que se quiere ver.