14.3 Estimaciones experimentales del efecto de las reducciones del tamaño de las clases
Diseño experimental y conjunto de datos
El Proyecto Student-Teacher Achievement Ratio (STAR) fue un gran experimento controlado aleatorio con el objetivo de afirmar si una reducción del tamaño de la clase es efectiva para mejorar los resultados educativos. Se llevó a cabo en 80 escuelas primarias de Tennessee durante un período de cuatro años durante la década de 1980 por el Departamento de Educación del Estado en EE. UU.
En el primer año, alrededor de 6400 estudiantes fueron asignados aleatoriamente a una de tres intervenciones: Clase pequeña (13 a 17 estudiantes por maestro), clase regular (22 a 25 estudiantes por maestro) y clase regular con ayudante (22 a 25 estudiantes por maestro y estudiantes con un asistente de maestro de tiempo completo). Los maestros también fueron asignados al azar a las clases que impartían. Las intervenciones se iniciaron cuando los estudiantes ingresaron a la escuela en el jardín de infantes y continuaron hasta el tercer grado. Los grupos de control y tratamiento en todos los grados se resumen en la Tabla 14.1.
K | 1 | 2 | 3 | |
---|---|---|---|---|
Tratamiento 1 | Clase pequeña | Clase pequeña | Clase pequeña | Clase pequeña |
Tratamiento 2 | Clase regular + Ayudante | Clase regular + Ayudante | Clase regular + Ayudante | Clase regular + Ayudante |
Control | Clase regular | Clase regular | Clase regular | Clase regular |
Cada año, el progreso de aprendizaje de los estudiantes se evaluó mediante la suma de los puntos obtenidos en las partes de matemáticas y lectura de una prueba estandarizada (la Prueba de rendimiento de Stanford).
El conjunto de datos STAR es parte del paquete AER.
# cargar el paquete AER y el conjunto de datos STAR
library(AER)
data(STAR)
head(STAR) muestra que existe una variedad de variables de factores que describen las características de los estudiantes y maestros, así como varios indicadores de la escuela, todos los cuales se registran por separado para los cuatro grados diferentes. Los datos están en formato ancho; es decir, cada variable tiene su propia columna y, para cada alumno, las filas contienen observaciones sobre estas variables. Usando dim(STAR) se encontró que existe un total de 11598 observaciones en 47 variables.
# obtener una descripción general
head(STAR, 2)
#> gender ethnicity birth stark star1 star2 star3 readk read1 read2 read3
#> 1122 female afam 1979 Q3 <NA> <NA> <NA> regular NA NA NA 580
#> 1137 female cauc 1980 Q1 small small small small 447 507 568 587
#> mathk math1 math2 math3 lunchk lunch1 lunch2 lunch3 schoolk school1
#> 1122 NA NA NA 564 <NA> <NA> <NA> free <NA> <NA>
#> 1137 473 538 579 593 non-free free non-free free rural rural
#> school2 school3 degreek degree1 degree2 degree3 ladderk ladder1
#> 1122 <NA> suburban <NA> <NA> <NA> bachelor <NA> <NA>
#> 1137 rural rural bachelor bachelor bachelor bachelor level1 level1
#> ladder2 ladder3 experiencek experience1 experience2 experience3
#> 1122 <NA> level1 NA NA NA 30
#> 1137 apprentice apprentice 7 7 3 1
#> tethnicityk tethnicity1 tethnicity2 tethnicity3 systemk system1 system2
#> 1122 <NA> <NA> <NA> cauc <NA> <NA> <NA>
#> 1137 cauc cauc cauc cauc 30 30 30
#> system3 schoolidk schoolid1 schoolid2 schoolid3
#> 1122 22 <NA> <NA> <NA> 54
#> 1137 30 63 63 63 63
dim(STAR)
#> [1] 11598 47
# obtener los nombres de las variables
names(STAR)
#> [1] "gender" "ethnicity" "birth" "stark" "star1"
#> [6] "star2" "star3" "readk" "read1" "read2"
#> [11] "read3" "mathk" "math1" "math2" "math3"
#> [16] "lunchk" "lunch1" "lunch2" "lunch3" "schoolk"
#> [21] "school1" "school2" "school3" "degreek" "degree1"
#> [26] "degree2" "degree3" "ladderk" "ladder1" "ladder2"
#> [31] "ladder3" "experiencek" "experience1" "experience2" "experience3"
#> [36] "tethnicityk" "tethnicity1" "tethnicity2" "tethnicity3" "systemk"
#> [41] "system1" "system2" "system3" "schoolidk" "schoolid1"
#> [46] "schoolid2" "schoolid3"
La mayoría de los nombres de las variables contienen un sufijo (k, 1, 2 o 3) que indica el grado al que se refiere la variable respectiva. Esto facilita el análisis de regresión porque permite ajustar el argumento formula en lm() para cada grado simplemente cambiando los sufijos de las variables de acuerdo con el objetivo.
El resultado producido por head() muestra que algunos valores registrados son NA y
En la salida de head(STAR, 2)
se encontró que el estudiante ingresó al experimento en tercer grado en una clase regular, por lo que el tamaño de la clase se registra en star3 y las otras variables indicadoras del tipo de clase son
# pedir los datos de NA para la primera observación e imprimir los resultados en la consola
1, !is.na(STAR[1, ])]
STAR[#> gender ethnicity birth star3 read3 math3 lunch3 school3 degree3
#> 1122 female afam 1979 Q3 regular 580 564 free suburban bachelor
#> ladder3 experience3 tethnicity3 system3 schoolid3
#> 1122 level1 30 cauc 22 54
is.na(STAR[1, ])
devuelve un vector lógico con TRUE en posiciones que corresponden a entradas
En general, no es necesario eliminar filas con datos faltantes porque lm() lo hace de forma predeterminada. La falta de datos puede implicar un tamaño de muestra pequeño y, por lo tanto, puede conducir a una estimación imprecisa y a una inferencia incorrecta. Sin embargo, esto no es un problema para el estudio en cuestión ya que, como se vera a continuación, los tamaños de muestra superan las 5000 observaciones para cada regresión realizada.
Análisis de los datos STAR
Como se puede ver en la Tabla 14.1, existen dos grupos de tratamiento en cada grado, clases pequeñas con solo 13 a 17 estudiantes y clases regulares con 22 a 25 estudiantes y un ayudante de enseñanza. Por lo tanto, se introducen dos variables binarias, cada una de las cuales es un indicador para el grupo de tratamiento respectivo, con el objetivo de que el estimador de diferencias capture el efecto del tratamiento para cada grupo de tratamiento por separado. Esto produce el modelo de regresión poblacional:
\[\begin{align} Y_i = \beta_0 + \beta_1 SmallClass_i + \beta_2 RegAide_i + u_i, \tag{14.3} \end{align}\]
con puntaje de prueba \(Y_i\), el indicador de clase pequeña \(SmallClass_i\) y \(RegAide_i\), el indicador de una clase regular con ayudante.
Se reproducen los resultados presentados en la Tabla 13.1 realizando la regresión (14.3) para cada grado por separado. En el caso de cada estudiante, la variable dependiente es simplemente la suma de los puntos obtenidos en las partes de matemáticas y lectura, construida usando I().
# calcular estimaciones de diferencias para cada grado
<- lm(I(readk + mathk) ~ stark, data = STAR)
fmk <- lm(I(read1 + math1) ~ star1, data = STAR)
fm1 <- lm(I(read2 + math2) ~ star2, data = STAR)
fm2 <- lm(I(read3 + math3) ~ star3, data = STAR) fm3
# obtener una matriz de coeficientes utilizando errores estándar robustos
coeftest(fmk, vcov = vcovHC, type= "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 918.04289 1.63339 562.0473 < 2.2e-16 ***
#> starksmall 13.89899 2.45409 5.6636 1.554e-08 ***
#> starkregular+aide 0.31394 2.27098 0.1382 0.8901
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(fm1, vcov = vcovHC, type= "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1039.3926 1.7846 582.4321 < 2.2e-16 ***
#> star1small 29.7808 2.8311 10.5190 < 2.2e-16 ***
#> star1regular+aide 11.9587 2.6520 4.5093 6.62e-06 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(fm2, vcov = vcovHC, type= "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1157.8066 1.8151 637.8820 < 2.2e-16 ***
#> star2small 19.3944 2.7117 7.1522 9.55e-13 ***
#> star2regular+aide 3.4791 2.5447 1.3672 0.1716
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(fm3, vcov = vcovHC, type= "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1228.50636 1.68001 731.2483 < 2.2e-16 ***
#> star3small 15.58660 2.39604 6.5051 8.393e-11 ***
#> star3regular+aide -0.29094 2.27271 -0.1280 0.8981
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Se recopilan los resultados y se presentan en una tabla usando stargazer().
# calcular errores estándar robustos para cada modelo y reunirlos en una lista
<- list(sqrt(diag(vcovHC(fmk, type = "HC1"))),
rob_se_1 sqrt(diag(vcovHC(fm1, type = "HC1"))),
sqrt(diag(vcovHC(fm2, type = "HC1"))),
sqrt(diag(vcovHC(fm2, type = "HC1"))))
library(stargazer)
stargazer(fmk,fm1,fm2,fm3,
title = "Proyecto STAR: Estimaciones de diferencias",
header = FALSE,
type = "latex",
model.numbers = F,
omit.table.layout = "n",
digits = 3,
column.labels = c("K", "1", "2", "3"),
dep.var.caption = "Variable dependiente: Grado",
dep.var.labels.include = FALSE,
se = rob_se_1)
Variable dependiente: Grado | ||||
K | 1 | 2 | 3 | |
starksmall | 13.90*** | |||
(2.45) | ||||
starkregular+aide | 0.31 | |||
(2.27) | ||||
star1small | 29.78*** | |||
(2.83) | ||||
star1regular+aide | 11.96*** | |||
(2.65) | ||||
star2small | 19.39*** | |||
(2.71) | ||||
star2regular+aide | 3.48 | |||
(2.54) | ||||
star3small | 15.59 | |||
star3regular+aide | -0.29 | |||
Constant | 918.04*** | 1,039.39*** | 1,157.81*** | 1,228.51*** |
(1.63) | (1.78) | (1.82) | (1.82) | |
Observations | 5,786 | 6,379 | 6,049 | 5,967 |
R2 | 0.01 | 0.02 | 0.01 | 0.01 |
Adjusted R2 | 0.01 | 0.02 | 0.01 | 0.01 |
Residual Std. Error | 73.49 (df = 5783) | 90.50 (df = 6376) | 83.69 (df = 6046) | 72.91 (df = 5964) |
F Statistic | 21.26*** (df = 2; 5783) | 56.34*** (df = 2; 6376) | 28.71*** (df = 2; 6046) | 30.25*** (df = 2; 5964) |
Table 14.2: Proyecto STAR - Estimaciones de diferencias
Las estimaciones presentadas en la Tabla 14.2 sugieren que la reducción del tamaño de la clase mejora el rendimiento de los estudiantes. A excepción del grado 1, las estimaciones del coeficiente en \(SmallClass\) son aproximadamente de la misma magnitud (las estimaciones se encuentran entre 13.90 y 19.39 puntos) y son estadísticamente significativas a \(1\%\). Además, un ayudante de enseñanza tiene poco efecto, posiblemente nulo, en el desempeño de los estudiantes.
Se aumenta el modelo de regresión (14.3) a partir de diferentes conjuntos de regresores por dos razones:
- Si los regresores adicionales explican parte de la variación observada en la variable dependiente, se obtienen estimaciones más eficientes de los coeficientes de interés.
- Si el tratamiento no se recibe al azar debido a fallas en el seguimiento del protocolo de tratamiento, las estimaciones obtenidas usando (14.3) pueden estar sesgadas. Agregar regresores adicionales puede resolver o mitigar este problema.
En particular, se consideran las siguientes características de estudiantes y profesores:
- \(experience\) — Años de experiencia del maestro.
- \(boy\) — El estudiante es un niño (ficticia).
- \(lunch\) — Elegibilidad para almuerzo gratis (ficticia).
- \(black\) — El estudiante es afroamericano (ficticia).
- \(race\) — La raza del estudiante no es blanca ni negra (ficticia).
- \(\text{schoolid}\) — Variables indicadoras de la escuela.
en las cuatro especificaciones de regresión poblacional
\[\begin{align} Y_i =& \beta_0 + \beta_1 SmallClass_i + \beta_2 RegAide_i + u_i, \tag{14.4} \\ Y_i =& \beta_0 + \beta_1 SmallClass_i + \beta_2 RegAide_i + \beta_3 experience_i + u_i, \tag{14.5} \\ Y_i =& \beta_0 + \beta_1 SmallClass_i + \beta_2 RegAide_i + \beta_3 experience_i + schoolid + u_i, \tag{14.6} \end{align}\]
y
\[\begin{align} Y_i =& \beta_0 + \beta_1 SmallClass_i + \beta_2 RegAide_i + \beta_3 experience_i + \beta_4 boy + \beta_5 lunch \\ & + \beta_6 black + \beta_7 race + schoolid + u_i. \tag{14.7} \end{align}\]
Antes de la estimación, se crean algunos subconjuntos y ordenan los datos utilizando funciones de los paquetes dplyr y tidyr. Ambos son parte de tidyverse, una colección de paquetes R diseñados para la ciencia de datos y el manejo de grandes conjuntos de datos (consulte el sitio oficial para obtener más información sobre los paquetes de tidyverse). Las funciones %>%, transmute() y mutate() son suficientes para nosotros aquí:
- %>% permite encadenar llamadas a funciones.
- transmute() permite subdividir el conjunto de datos nombrando las variables que se van a mantener.
- mutate() es conveniente para agregar nuevas variables basadas en las existentes conservando estas últimas.
Los modelos de regresión (14.4) a (14.7) requieren las variables gender, ethnicity, stark, readk, mathk, lunchk, experiencek y schoolidk. Después de eliminar las variables restantes usando transmute(), se usa mutate() para agregar tres variables binarias adicionales que son derivadas de las existentes: black, race y boy. Se generan usando declaraciones lógicas dentro de la función ifelse().
# cargar los paquetes 'dplyr' y 'tidyr' para las funcionalidades de gestión de datos
library(dplyr)
library(tidyr)
# generar subconjunto con datos de jardín de infantes
<- STAR %>%
STARK transmute(gender,
ethnicity,
stark,
readk,
mathk,
lunchk,
experiencek,%>%
schoolidk) mutate(black = ifelse(ethnicity == "afam", 1, 0),
race = ifelse(ethnicity == "afam" | ethnicity == "cauc", 1, 0),
boy = ifelse(gender == "male", 1, 0))
# estimar los modelos
<- lm(I(mathk + readk) ~ stark + experiencek,
gradeK1 data = STARK)
<- lm(I(mathk + readk) ~ stark + experiencek + schoolidk,
gradeK2 data = STARK)
<- lm(I(mathk + readk) ~ stark + experiencek + boy + lunchk
gradeK3 + black + race + schoolidk,
data = STARK)
En aras de la brevedad, se excluyen los coeficientes de las variables ficticias del indicador en la salida de coeftest() subconjuntando las matrices.
# obtener una inferencia robusta sobre la significancia de los coeficientes
coeftest(gradeK1, vcov. = vcovHC, type = "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 904.72124 2.22235 407.1020 < 2.2e-16 ***
#> starksmall 14.00613 2.44704 5.7237 1.095e-08 ***
#> starkregular+aide -0.60058 2.25430 -0.2664 0.7899
#> experiencek 1.46903 0.16929 8.6778 < 2.2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(gradeK2, vcov. = vcovHC, type = "HC1")[1:4, ]
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 925.6748750 7.6527218 120.9602155 0.000000e+00
#> starksmall 15.9330822 2.2411750 7.1092540 1.310324e-12
#> starkregular+aide 1.2151960 2.0353415 0.5970477 5.504993e-01
#> experiencek 0.7431059 0.1697619 4.3773429 1.222880e-05
coeftest(gradeK3, vcov. = vcovHC, type = "HC1")[1:7, ]
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 937.6831330 14.3726687 65.2407117 0.000000e+00
#> starksmall 15.8900507 2.1551817 7.3729516 1.908960e-13
#> starkregular+aide 1.7869378 1.9614592 0.9110247 3.623211e-01
#> experiencek 0.6627251 0.1659298 3.9940097 6.578846e-05
#> boy -12.0905123 1.6726331 -7.2284306 5.533119e-13
#> lunchkfree -34.7033021 1.9870366 -17.4648529 1.437931e-66
#> black -25.4305130 3.4986918 -7.2685776 4.125252e-13
Ahora se usa stargazer() para recopilar toda la información relevante en una tabla estructurada.
# calcular errores estándar robustos para cada modelo y reunirlos en una lista
<- list(sqrt(diag(vcovHC(fmk, type = "HC1"))),
rob_se_2 sqrt(diag(vcovHC(gradeK1, type = "HC1"))),
sqrt(diag(vcovHC(gradeK2, type = "HC1"))),
sqrt(diag(vcovHC(gradeK3, type = "HC1"))))
stargazer(fmk, fm1, fm2, fm3,
title = "Proyecto STAR - Estimación de diferencias con regresores adicionales para jardín de infantes",
header = FALSE,
type = "latex",
model.numbers = F,
omit.table.layout = "n",
digits = 3,
column.labels = c("(1)", "(2)", "(3)", "(4)"),
dep.var.caption = "Variable dependiente: Puntaje de la prueba en el jardín de infantes",
dep.var.labels.include = FALSE,
se = rob_se_2)
Variable dependiente: Puntaje de la prueba en el jardín de infantes | ||||
(1) | (2) | (3) | (4) | |
starksmall | 13.899*** | 14.006*** | 15.933*** | 15.890*** |
(2.454) | (2.447) | (2.241) | (2.155) | |
starkregular+aide | 0.314 | -0.601 | 1.215 | 1.787 |
(2.271) | (2.254) | (2.035) | (1.961) | |
experiencek | 1.469*** | 0.743*** | 0.663*** | |
(0.169) | (0.170) | (0.166) | ||
boy | -12.091*** | |||
(1.673) | ||||
lunchkfree | -34.703*** | |||
(1.987) | ||||
black | -25.431*** | |||
(3.499) | ||||
race | 8.501 | |||
(12.520) | ||||
Constant | 918.043*** | 904.721*** | 925.675*** | 937.683*** |
(1.633) | (2.222) | (7.653) | (14.373) | |
School indicators? | no | no | yes | yes |
Observations | 5,786 | 5,766 | 5,766 | 5,748 |
R2 | 0.007 | 0.020 | 0.234 | 0.291 |
Adjusted R2 | 0.007 | 0.020 | 0.223 | 0.281 |
Residual Std. Error | 73.490 (df = 5783) | 73.085 (df = 5762) | 65.075 (df = 5684) | 62.663 (df = 5662) |
F Statistic | 21.263*** (df = 2; 5783) | 39.861*** (df = 3; 5762) | 21.413*** (df = 81; 5684) | 27.364*** (df = 85; 5662) |
Table 14.3: Proyecto STAR - Estimación de diferencias con regresores adicionales para jardín de infantes
Los resultados en la columna (1) de la Tabla 14.3 simplemente repiten los resultados obtenidos para (14.3). Las columnas (2) a (4) revelan que la suma de las características de los estudiantes y los efectos fijos de la escuela no conducen a estimaciones sustancialmente diferentes de los efectos del tratamiento. Este resultado hace que sea más plausible que las estimaciones de los efectos obtenidos utilizando el modelo (14.3) no adolezcan de fallas en la asignación aleatoria. Existe una disminución en los errores estándar y un aumento en \(\bar{R}^2\), lo que implica que las estimaciones son más precisas.
Debido a que los maestros fueron asignados aleatoriamente en las clases, la inclusión del efecto fijo de la escuela nos permite estimar el efecto causal de la experiencia de un maestro en los puntajes de las pruebas de los estudiantes de jardín de infantes. La regresión (3) predice que el efecto promedio de 10 años de experiencia en los puntajes de las pruebas será de \(10\cdot 0.74=7.4\) puntos. Se debe tener en cuenta que las otras estimaciones sobre las características de los estudiantes en la regresión (4) no tienen una interpretación causal debido a una asignación no aleatoria.
¿Los efectos estimados presentados en la Tabla 14.3 son grandes o pequeños en un sentido práctico? Traduciendo los cambios predichos en los puntajes de las pruebas a unidades de desviación estándar para permitir una comparación (consulte la Sección 10.4 para obtener un argumento similar).
# calcular las desviaciones estándar de la muestra de los puntajes de las pruebas
<- c("K" = sd(na.omit(STAR$readk + STAR$mathk)),
SSD "1" = sd(na.omit(STAR$read1 + STAR$math1)),
"2" = sd(na.omit(STAR$read2 + STAR$math2)),
"3" = sd(na.omit(STAR$read3 + STAR$math3)))
# traducir los efectos de clases pequeñas a desviaciones estándar
<- c("K" = as.numeric(coef(fmk)[2]/SSD[1]),
Small "1" = as.numeric(coef(fm1)[2]/SSD[2]),
"2" = as.numeric(coef(fm2)[2]/SSD[3]),
"3" = as.numeric(coef(fm3)[2]/SSD[4]))
# ajustar los errores estándar
<- c("K" = as.numeric(rob_se_1[[1]][2]/SSD[1]),
SmallSE "1" = as.numeric(rob_se_1[[2]][2]/SSD[2]),
"2" = as.numeric(rob_se_1[[3]][2]/SSD[3]),
"3" = as.numeric(rob_se_1[[4]][2]/SSD[4]))
# traducir los efectos de las clases regulares con ayuda a las desviaciones estándar
<- c("K" = as.numeric(coef(fmk)[3]/SSD[1]),
RegAide"1" = as.numeric(coef(fm1)[3]/SSD[2]),
"2" = as.numeric(coef(fm2)[3]/SSD[3]),
"3" = as.numeric(coef(fm3)[3]/SSD[4]))
# ajustar los errores estándar
<- c("K" = as.numeric(rob_se_1[[1]][3]/SSD[1]),
RegAideSE "1" = as.numeric(rob_se_1[[2]][3]/SSD[2]),
"2" = as.numeric(rob_se_1[[3]][3]/SSD[3]),
"3" = as.numeric(rob_se_1[[4]][3]/SSD[4]))
# recopilar los resultados en un data.frame y redondear
<- t(round(data.frame(
df
Small, SmallSE, RegAide, RegAideSE, SSD),digits = 2))
Es bastante fácil convertir data.frame o df en una tabla.
# generar una tabla simple usando Stargazer
stargazer(df,
title = "Efectos estimados del tamaño de la clase (en unidades de desviaciones estándar)",
type = "html",
summary = FALSE,
header = FALSE
)
K | 1 | 2 | 3 | |
Small | 0.190 | 0.330 | 0.230 | 0.210 |
SmallSE | 0.030 | 0.030 | 0.030 | 0.040 |
RegAide | 0 | 0.130 | 0.040 | 0 |
RegAideSE | 0.030 | 0.030 | 0.030 | 0.030 |
SSD | 73.750 | 91.280 | 84.080 | 73.270 |
Table 14.4: Efectos estimados del tamaño de la clase (en unidades de desviaciones estándar)
El efecto estimado de clases pequeñas es mayor para el primer grado. Lo anterior probablemente se deba a que los estudiantes del grupo de control del primer grado obtuvieron malos resultados en la prueba por alguna razón desconocida o simplemente debido a una variación aleatoria. La diferencia entre el efecto estimado de estar en una clase pequeña y estar en clases regulares con un asistente es aproximadamente 0.2 desviaciones estándar para todos los grados. Esto lleva a la conclusión de que el efecto de estar en una clase de tamaño regular con un asistente es cero y el efecto de estar en una clase pequeña es aproximadamente el mismo para todos los grados.
Hasta qué punto estas estimaciones experimentales son comparables con las estimaciones observacionales obtenidas utilizando datos sobre distritos escolares en California y Massachusetts en el Capítulo 10. Resulta que, de hecho, las estimaciones son muy similares. Consulte la sección mencionada anteriormente en el libro para obtener una discusión más detallada.