Paquetes necesarios para trabajar:

library(haven)
library(ggplot2)
library(hrbrthemes)
library(viridis)
library(quantreg)
library(data.table)
library(corrplot)
library(pastecs)
library(gmodels)
library(pheatmap)

Pregunta 1

Pretendemos analizar el impacto del tamaño del aula sobre la nota. ¿Cómo llegar a la pregunta que nos interesa?


Konrad Körding/ UPenn

PEOPLE ALWAYS THINK DATA SCIENTIST IS ABOUT STATISTICS LIKE THEY’RE BAD LIKE IT’S MATH AND STATISTICS AND LIKE NO IT’S NOT IT’S ABOUT LOGICAL THINKING. GOOD DATA SCIENCE IS ABOUT HAVING GOOD QUESTIONS. QUESTIONS THAT YOU ARE VERY CLEAR ABOUT.


y, por otro lado, ¿de dónde puede surgir la pregunta?


Alfonso Novales UCM

ES CONVENIENTE QUE SURJA SIMPLEMENTE DE PLANTEAR ALGO QUE ES MARGINAL, LIGERAMENTE DIFERENTE, DE LO QUE SE HA ANALIZADO EN UN ARTÍCULO CONCRETO. O EN UN SEMINARIO AL CUAL HEMOS ASISTIDO


En el artículo (https://www.sciencedirect.com/science/article/abs/pii/S0927537113000468) discuten sobre su hallazgo: el efecto sorprendente (sobre los resultados académicos) de las aulas grandes. A nosotros nos llama la atención porque:

  1. Intuitivamente, pensamos que las clases pequeñas funcionan mejor

  2. Pero no siempre es así: los alumnos también aprenden tejiendo redes de entre ellos y, en grupos reducidos, no parece tan probable que eso ocurra.

¿Podemos encontrar el tamaño óptimo del aula? Parece una pregunta demasiado ambiciosa. Deberemos pensar en una pregunta que, en la línea de lo que nos interesa, no respondan en el artículo que nos ha llamado la atención. Y sale enseguida, con leeer un poco la prensa ¿podrá ser distinto el efecto del tamaño del aula sobre la nota de los alumnos atendiendo a las diferentes clases sociales? (https://www.apa.org/pi/ses/resources/publications/education)

Pregunta 2

¿Seremos capaces de medir una relación causa-efecto?

En principio, no lo deberíamos tener tan claro. Por un lado, el tamaño del aula es una decisión de política educativa que puede depender de diferentes factores (es decir, no es una decisión arbitraria). Por otro lado, los alumnos con buenos resultados puedan permitirse elegir qué tipo de colegio quieren y ese factor tan difícil de medir (ser un estudiante hábil) podría afectar tanto al tamaño de la clase elegido y a su resultado académico, confundiéndonos y haciéndonos creer que estamos midiendo el impacto causal de una variable sobre otra.


Alfonso Novales UCM

¿podemos pronunciarnos los economistas sobre causalidad? Sí, siempre que lo hagamos en consonancia con una creencia inicial acerca de que un determinado factor puede ser causal frente a determinado fenómeno.


En este caso, analizaremos- con toda la cautela posible- la relación entre el tamaño del aula y la nota tratando de pensar en segmentos (como el status social) que podría alterar la relación entre ambas variables. Ese es el modelo en el que trabajaremos y lo que encontremos, pese a no ser un efecto “causal”, podría ayudarnos a realizar predicciones entendiendo cómo se comporta nuestra muestra.


K. Körding U.Penn/ Jesús Gonzalo UC3M

is basically the difference between predicting and understanding…there are a lot of things in the world that we don’t understand perfectly well: a helicopter. Most people believe that they don’t know why a helicopter flies: you can’t answer that, is entirely unclear. But you can predict that the helicopter will fly.

Pero tampoco me fiaría de un modelo predictivo que predice bien si no está basado en teorías causales ¿por qué? mañana cambia la situación, y viene un viento muy fuerte y el helicóptero que hemos predicho que volará se pega una leche…la teoría causal nos sirve para tunear esos modelos predictivos.


Pregunta 2

Cargue los “microdatos” asociados a las encuestas de PISA 2003 (están en https://www.oecd.org/pisa/pisaproducts/database-pisa2003.htm). Accederá a dos ficheros con datos: 1. Student Questionarie data file 2. School Questionarie data file

Necesitará descargarlos (tardan un poco, puesto que son archivos con mucha información) y fusionarlos. Deberá fusionar la información del colegio en el fichero de los estudiantes, de tal forma que para cada estudiante tenga información cuantitativa y cualitativa sobre el colegio. Por otro lado, analizaremos aquellas aulas que tengan más de 10 alumnos y menos de 80, puesto que las situaciones complementarias son poco probables en la muestra y se refieren a casos muy concretos

Class sizes in mainland China are generally large: the national norm is 50 students. However, in rural areas where good schools are sparse, it is not unusual to see classes of over 80 or in the extreme case, over 100

PISA_STUDENTS <- read_sav("INT_stui_2003.sav")
PISA_SCHOOLS <- read_sav("INT_schi_2003.sav")

PISA_STUDENTS<-data.frame(PISA_STUDENTS)
PISA_SCHOOLS<-data.frame(PISA_SCHOOLS)

############################################## We merge both data sets and give 
##simpler names to some of the most important variables.

FINAL_DB1<-merge(PISA_SCHOOLS,PISA_STUDENTS, by=c("SCHOOLID","CNT"))

names(FINAL_DB1)[names(FINAL_DB1) == "PV1MATH"] <- "grade"
names(FINAL_DB1)[names(FINAL_DB1) == "ESCS"] <- "status"
names(FINAL_DB1)[names(FINAL_DB1) == "ST36Q01"] <- "size"



FINAL_DB1<-FINAL_DB1[!is.na(FINAL_DB1$status),]
FINAL_DB1<-FINAL_DB1[!is.na(FINAL_DB1$grade),]
FINAL_DB1<-FINAL_DB1[!is.na(FINAL_DB1$size),]

FINAL_DB1<- subset(FINAL_DB1, FINAL_DB1$size <59 & FINAL_DB1$size>10)

Pregunta 2: Análisis descriptivo univariante

Genere un set de datos con la nota, el tamaño del aula y el status socieconómico y analice la información que obtiene

datos1<-data.frame(FINAL_DB1$grade,FINAL_DB1$size,FINAL_DB1$status)
options(scipen=999)
stat.desc(datos1)
##                FINAL_DB1.grade   FINAL_DB1.size FINAL_DB1.status
## nbr.val         230874.0000000  230874.00000000 230874.000000000
## nbr.null             0.0000000       0.00000000      0.000000000
## nbr.na               0.0000000       0.00000000      0.000000000
## min                 64.7609000      11.00000000     -4.565420000
## max                881.0874000      58.00000000      2.960120000
## range              816.3265000      47.00000000      7.525540000
## sum          113626844.8675000 6031949.00000000 -27921.315100000
## median             494.3449000      25.00000000     -0.078880000
## mean               492.1595540      26.12658420     -0.120937460
## SE.mean              0.2157414       0.01772515      0.002188107
## CI.mean.0.95         0.4228475       0.03474083      0.004288633
## var              10745.8769211      72.53618040      1.105381332
## std.dev            103.6623216       8.51681750      1.051371167
## coef.var             0.2106275       0.32598282     -8.693511249

La variable grade, que es la que pretendemos explicar presenta un valor promedio de unos 492 puntos, con una desviación típica de 103. Es de esperar que el 95% de los estudiantes se encuentren entre 300 puntos y 700, aproximadamente (nótese que la media y la mediana son similares, por lo que la distribución es razonablemente simétrica). Al observar el máximo y el mínimo, hay que notar que puede haber atípicos por la cola izquierda de la distribución, puesto que el mínimo es de, aproximadamente, 64 puntos. Habrá que ver si alumnos con resultados sorprendentes pueden explicarse mediante alguno de los factores que proponemos. La variable status es un índice creado, de manera sintética, por PISA utilizando un conjunto de variables socieconómicas declaradas por el alumno. De esta forma, los valores nominales del índice no quieren decir nada, pero sí la posición relativa del individuo. Como vemos, fluctúa de -4.56 (estrato social muy bajo) a 2.96 (que es el status más alto). Respecto al tamaño de la clase, este fluctúa entre el valor de 11 y el de 58, con un valor promedio de 26 alumnos.

Fijémonos en los coeficientes de variación: el de la variable nota es de 0.21 y el del tamaño del aula 0.36, indicando que no hay una gran discrepancia entre las variaciones de las variables que nos interesan. El status tiene un coeficiente de variación especialmente alto, pero este no deberíamos tenerlo en cuenta puesto que el promedio de la variable que representa es prácticamente 0. Sin embargo, la desviación típica de la variable es razonable, indicando que el 95% de las observaciones estarán entre -2 y 2, de tal manera que tenemos una variabilidad aceptable en la variable que mide el status social.

Pregunta 3

Analize la relación de la nota del individuo con el tamaño del aula. Piense en posibles “fuentes de heterogeneidad” en la relación entre ambas variables

ggplot(FINAL_DB1, aes(x=size, y=grade)) + 
  geom_point(size=1) +
  theme_ipsum(axis_title_size=15)+
  geom_smooth(method='lm', formula= y~x)
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.

Lo primero que uno aprecia es una relación débil y decreciente entre el tamaño del aula y la nota. Pero vayamos más lejos. Miremos con atención el gráfico


Jesús Gonzalo, UC3M

Hay diferentes dispersiones: cuando el tamaño del grupo es menor, hay menor dispersión: los cuantiles inferiores en la nota son más altos , pero “matamos” a la gente que va sacando mejor nota.


Sitúese en torno a 10 alumnos por aula. Si se fija, la nota más baja de esos alumnos se sitúa más cerca de los 250 puntos que en el caso en el que el tamaño vaya aumentando. Es decir, parece que las aulas pequeñas podrían beneficiar a los alumnos más desaventajados. Sin embargo, pasa lo contrario en los alumnos con notas más altas. De ahí el “matamos a la gente que va sacando mejor nota”. Esto es interesante, nos empieza a indicar comportamientos heterogéneos que cualquier posible modelo lineal no va a poder capturar. Como nos dicen en el vídeo 2, en los grupos “muy grandes” ocurre algo parecido. ¿Cómo podemos explicar esto? Como ves trasciende a decir, simplemente, hay una relación negativa entre el tamaño del aula y la nota.


Alfonso Novales, UCM

Si tienes 10000 observaciones, tú como investigador, ya estás sospechando que esa pregunta tan concreta que ha motivado tu investigación, puede tener respuestas diferentes en función de determinadas características de las observaciones muestrales.


y, por otro lado,


Pablo Simón, UC3M

Pero cuando coges y dices ¿si a ti te toca la lotería te vuelves independentista en Cataluña? No parece que ese sea el mecanismo. Hay que pensar en términos teóricos qué puede haber detrás: a lo mejor es el estatus económico…


Esto implica que debemos tener un modelo sensato, sencillo en sus inicios, que nos permita ir indagando en los datos. Por ahora, pensaremos que es una cuestión de estatus social, que es lo que nos sugiere la intuición. Utilice siempre su intuición y las ideas teóricas que ha estudiado en su grado. Si no, piense sobre un artículo que haya leído que pueda estimular esas ideas. No haga las cosas al azar. Porque si trabaja al azar, encontrará cosas que no es capaz de explicar.

Por ejemplo, sospechamos que el status social podría ser una primera fuente de heterogeneidad en la muestra. Para poder analizar este extremo, y dado que el status social es una variable continua, vamos a “discretizarla”, generando distintos intervalos de status social. Para ello, decida cuántos grupos sociales quiere utilizar (nosotros hemos elegido 5) y, a continuación, elija los puntos de corte de cada status. Puede utilizar, por ejemplo, los quintiles de la distribución (si no tiene a mano otra idea)

ssq<-quantile(na.omit(FINAL_DB1$status),probs=seq(0,1,0.20))

De esta forma, generaremos una nueva variable de status social discreta que nos permita entender el comportamiento de la relación entre el tamaño del aula y la nota para los distintos status.

new_status<- as.factor(ifelse(FINAL_DB1$status < ssq[2], 'Very Low',
                         ifelse(FINAL_DB1$status>= ssq[2] & FINAL_DB1$status < ssq[3] , 'Low', 
                                ifelse(FINAL_DB1$status >= ssq[3] & FINAL_DB1$status < ssq[4], 'Medium', 
                                       ifelse(FINAL_DB1$status >= ssq[4] & FINAL_DB1$status < ssq[5], 'High','Very High')))))



FINAL_DB2<-data.frame(FINAL_DB1,new_status) #generamos una nueva base donde incluímos la nueva variable de status sin "cargarnos" la otra

Ahora, puede tratar de cruzar estas tres variables.

ggplot(FINAL_DB2, aes(x=size, y=grade,color=new_status)) + 
  geom_point(size=2) +
  theme_ipsum(axis_title_size=15)
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.

Donde podemos apreciar que, en términos promedio, el status más alto (azul) se concentra en clases relativamente pequeñas y notas por encima del promedio. El estatus más bajo (rosa) está mayoritariamente presente en calificaciones por debajo de la media y, sin embargo, está presente tanto en las aulas grandes como en las pequeñas. Por lo que parece, por ahora:

1.- El status alto predice, en promedio, notas más altas

2.- El status alto está relacionado con clases más pequeñas

Quizás haya otro factor que pueda ser interesante analizar ¿dónde se sitúan las clases grandes y las pequeñas? Para ello, deberemos cruzar la información del tamaño del aula con la variable “localización”. Como el tamaño del aula es una variable continua, también la vamos a discretizar. Para ello, nos hemos fijado en otros estudios de PISA ya que, en años posteriores, decidieron tratar el tamaño del aula como una variable discreta. Tomamos esos valores como umbrales para crear nuestros intervalos. También generamos la variable del tamaño de la ciudad.

new_size<- as.factor(ifelse(FINAL_DB2$size <18, 'Very Small',
                         ifelse(FINAL_DB2$size>=18 & FINAL_DB2$size <22 , 'Small', 
                                ifelse(FINAL_DB2$size >=22 & FINAL_DB2$size < 27, 'Medium', 
                                       ifelse(FINAL_DB2$size >=27 & FINAL_DB2$size < 32, 'Big','Very Big')))))


FINAL_DB3<-data.frame(FINAL_DB2,new_size)




where<- as.factor(ifelse(FINAL_DB3$SC01Q01  ==1, 'Very Small Village',
                         ifelse(FINAL_DB3$SC01Q01 ==2, 'Small Town', 
                                ifelse(FINAL_DB3$SC01Q01 ==3, 'Town', 
                                       ifelse(FINAL_DB3$SC01Q01 ==4, 'City', 
                                        ifelse(FINAL_DB3$SC01Q01   ==5, 'Big City','Other'))))))

FINAL_DB4<-data.frame(FINAL_DB3,where)


CrossTable(FINAL_DB4$where, FINAL_DB4$new_size,prop.r=TRUE, prop.c=FALSE,
           prop.t=FALSE, prop.chisq=FALSE) 
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Row Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  216468 
## 
##  
##                    | FINAL_DB4$new_size 
##    FINAL_DB4$where |        Big |     Medium |      Small |   Very Big | Very Small |  Row Total | 
## -------------------|------------|------------|------------|------------|------------|------------|
##           Big City |       5670 |       5500 |       3578 |       7106 |       2293 |      24147 | 
##                    |      0.235 |      0.228 |      0.148 |      0.294 |      0.095 |      0.112 | 
## -------------------|------------|------------|------------|------------|------------|------------|
##               City |      11994 |      11098 |       8136 |      12069 |       5172 |      48469 | 
##                    |      0.247 |      0.229 |      0.168 |      0.249 |      0.107 |      0.224 | 
## -------------------|------------|------------|------------|------------|------------|------------|
##         Small Town |       9218 |      11931 |      11466 |       6376 |       8877 |      47868 | 
##                    |      0.193 |      0.249 |      0.240 |      0.133 |      0.185 |      0.221 | 
## -------------------|------------|------------|------------|------------|------------|------------|
##               Town |      16119 |      18301 |      14375 |      12790 |       9574 |      71159 | 
##                    |      0.227 |      0.257 |      0.202 |      0.180 |      0.135 |      0.329 | 
## -------------------|------------|------------|------------|------------|------------|------------|
## Very Small Village |       3336 |       5384 |       6274 |       4026 |       5805 |      24825 | 
##                    |      0.134 |      0.217 |      0.253 |      0.162 |      0.234 |      0.115 | 
## -------------------|------------|------------|------------|------------|------------|------------|
##       Column Total |      46337 |      52214 |      43829 |      42367 |      31721 |     216468 | 
## -------------------|------------|------------|------------|------------|------------|------------|
## 
## 

Como vemos, en las grandes ciudades, más del 50% de las aulas son grandes o muy grandes mientras que en los pueblos pequeños pasa lo contrario. Esto nos ayuda a tomar, de nuevo, una determinación (nuevo camino del laberinto): circunscribir nuestro estudio a analizar el impacto del tamaño del aula en los resultados en las ciudades grandes y en las pequeñas, clasificando, a su vez, por status social.

Ciudades Grandes

Tomamos una submuestra donde sólo incluimos los datos de “Gran Ciudad” y “Ciudad” y hacemos gráficos de nubes de puntos asociados a cada status social

Big_City <- subset(FINAL_DB4, where =="Big City"| where=="City")

ratio.values <- (max(Big_City$size)-min(Big_City$size))/(max(Big_City$grade)-min(Big_City$grade))
ratio.display <- 70/15

  
plot_BIG<-ggplot(Big_City, aes(x=size, y=grade,color=new_status)) + 
  geom_point(size=1) +facet_grid(new_status ~ .)+ geom_smooth(method='lm', formula= y~x,color='black')+theme_ipsum(axis_title_size=9)+ggtitle("Big City") 
                                                                               
                                                                                 
                                                                                 
plot_BIG+ coord_fixed(ratio.values / ratio.display)
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.

Podemos ver que en las ciudades grandes, da igual el status social, no parece haber una relación relevante entre el tamaño del aula y la nota obtenida. Dado, además, que las relaciones podrían ser razonablemente lineales, analicemos el coeficiente de correlación lineal para cada nivel de status social

dt <- data.table(Big_City)
dtCor <- dt[, .(mCor = cor(size,grade)), by=new_status]

dtCor
##    new_status        mCor
## 1:       High -0.05306876
## 2:        Low -0.06293181
## 3:     Medium -0.04114715
## 4:   Very Low -0.11218587
## 5:  Very High -0.05472152

Las correlaciones son, como vemos, muy modestas. La más alta es la que resulta, en las clases más bajas entre el tamaño del aula y la nota, en torno a -0.11.

Ciudades pequeñas

Repetimos el mismo ejercicio con ciudades pequeñas

small_Town <- subset(FINAL_DB4, where == "Small Town"| where=="Very Small Village")

ratio.values <- (max(small_Town$size)-min(small_Town$size))/(max(small_Town$grade)-min(small_Town$grade))
ratio.display <- 70/15



plot_SMALL<-ggplot(small_Town, aes(x=size, y=grade,color=new_status)) + 
  geom_point(size=1) +facet_grid(new_status ~ .)+ geom_smooth(method='lm', formula= y~x,color='black')+theme_ipsum(axis_title_size=9)+ggtitle("Small Town") 
                                                                               
                                                                                 
                                                                                 
plot_SMALL+ coord_fixed(ratio.values / ratio.display)
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.
## Don't know how to automatically pick scale for object of type haven_labelled/vctrs_vctr/double. Defaulting to continuous.

En las ciudades pequeñas y pueblos parece que los individuos con status social bajo y muy bajo sí que sufren cierto efecto del tamaño del aula (son, quizás, las pendientes más negativas que encontramos). De acuerdo con las correlaciones

dt <- data.table(small_Town)
dtCor_small <- dt[, .(mCor = cor(size,grade)), by=new_status]

dtCor_small
##    new_status        mCor
## 1:  Very High -0.04556226
## 2:        Low -0.20471567
## 3:   Very Low -0.29247927
## 4:     Medium -0.10712469
## 5:       High -0.11072335

Las correlaciones más destacadas ocurren en “very low” y “low” status, cerca del -0.30. Esto traza ya conclusiones de interés: el tamaño del aula podría ser ligeramente relevante en las ciudades y pueblos pequeños y en estatus socioeconómicos bajos. En el resto no encontramos una evidencia clara y remarcable.

Pregunta 4: La estimación de modelos

Ahora trataremos de cuantificar el efecto del tamaño del aula sobre la nota en los distintos contextos que hemos ido descubriendo. ¿Será el p-valor la mejor herramienta para discutir la relevancia del efecto del tamaño del aula?


Alfonso Novales, UCM

Entonces, uno puede preguntarse ¿para qué debo estimar un modelo paramétrico? Y la respuesta es que para muy pocas cosas ya. Y es muy bueno que te hayas dado cuenta de eso. Lo tienes que estimar porque el análisis no paramétrico no te va a responder a preguntas del tipo : si estas causas potenciales- o estos determinantes, digamos- varían de determinada manera, qué efecto puedo esperar en esta otra variable? La magnitud de esos impactos no los obtienes de la estadística no paramétrica


Restringimos la muestra desechando las ciudades “medianas” y tomamos la muestra que hemos utilizado para los gráficos anteriores. Estimamos un modelo por mínimos cuadrados que trate de estimar una pendiente para en la relación “tamaño de clase” con “nota” para cada segmento de interés (ciudad pequeña y grande y status)

Muestra_final <- subset(FINAL_DB4, where =="Big City"| where=="City"|where =="Small Town"| where=="Very Small Village")


mod_final<-lm(grade~size*where+size*status, data=Muestra_final)

summary(mod_final)
## 
## Call:
## lm(formula = grade ~ size * where + size * status, data = Muestra_final)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -384.93  -59.26    0.88   60.69  364.81 
## 
## Coefficients:
##                               Estimate Std. Error t value             Pr(>|t|)
## (Intercept)                  511.50567    1.95312 261.891 < 0.0000000000000002
## size                          -0.41002    0.06646  -6.170       0.000000000686
## whereCity                      5.30564    2.37757   2.232             0.025647
## whereSmall Town               22.81597    2.38241   9.577 < 0.0000000000000002
## whereVery Small Village       27.71050    2.58129  10.735 < 0.0000000000000002
## status                        41.60528    0.73825  56.357 < 0.0000000000000002
## size:whereCity                -0.29584    0.08161  -3.625             0.000289
## size:whereSmall Town          -1.11856    0.08578 -13.040 < 0.0000000000000002
## size:whereVery Small Village  -1.80452    0.09461 -19.074 < 0.0000000000000002
## size:status                    0.15655    0.02613   5.990       0.000000002098
##                                 
## (Intercept)                  ***
## size                         ***
## whereCity                    *  
## whereSmall Town              ***
## whereVery Small Village      ***
## status                       ***
## size:whereCity               ***
## size:whereSmall Town         ***
## size:whereVery Small Village ***
## size:status                  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 89.17 on 145299 degrees of freedom
## Multiple R-squared:  0.2608, Adjusted R-squared:  0.2608 
## F-statistic:  5697 on 9 and 145299 DF,  p-value: < 0.00000000000000022

Como es de esperar, dado el tamaño muestral, todos los coeficientes son significativos al 5%. Ya sabe que esa frase, en el contexto en el que estamos trabajando, “no tiene un gran significado” para nosotros. Las muestras grandes sesgarán los p-valores a la baja, puesto que estamos estimando en un contexto de “sobreprecisión”. Es más interesante centrarse en los coeficientes estimados. De hecho, una manera atractiva de analizar el impacto de la variable de interés es utilizar el modelo para hacer predicciones y ver qué nota esperar para distintos subgrupos de interés. Generamos los subgrupos

#Damos distintos valores de interés a las variables explicativas: creamos para tres valores de status social (bajo=-0.11, medio=1.5 y alto=2) un vector que recorra clases de 15,20,25,30,35 estudiantes para evaluar las notas en ciudad grande y ciudad pequeña.

Big_city_status_medio<-data.frame(size=seq(15,35,5),where="Big City",status=-0.11)
Big_city_status_High<-data.frame(size=seq(15,35,5),where="Big City",status=1.5)
Big_city_status_low<-data.frame(size=seq(15,35,5),where="Big City",status=-2)

Small_Town_status_medio<-data.frame(size=seq(15,35,5),where="Small Town",status=-0.11)
Small_Town_status_High<-data.frame(size=seq(15,35,5),where="Small Town",status=1.5)
Small_Town_status_low<-data.frame(size=seq(15,35,5),where="Small Town",status=-2)


#realizamos predicciones con el modelo para distintos valores asociados a ciudades grandes
pBig_city_status_medio<-predict(mod_final,Big_city_status_medio)
pBig_city_status_High<-predict(mod_final,Big_city_status_High)
pBig_city_status_low<-predict(mod_final,Big_city_status_low)


#realizamos predicciones con el modelo para distintos valores asociados a ciudades pequeñas
pSmall_Town_status_medio<-predict(mod_final,Small_Town_status_medio)
pSmall_Town_status_High<-predict(mod_final,Small_Town_status_High)
pSmall_Town_status_low<-predict(mod_final,Small_Town_status_low)

#juntamos todas las predicciones para poder hacer un gráfico-resumen
data_frame_predict<-data.frame(pBig_city_status_medio,pBig_city_status_High,pBig_city_status_low,pSmall_Town_status_medio,pSmall_Town_status_High,pSmall_Town_status_low)
DM<-data.matrix(data_frame_predict)


pheatmap(DM, display_numbers = T,cluster_rows=0,cluster_columns=0,fontsize_number=10,fontsize_col=10,fontsize_row=10,labels_row=c("15","20","25","30","35"),labels_col=c("BC_medium","BC_High","BC_Low","ST_medium","ST_High","ST_low"),legend=FALSE)

Esto nos proporciona un gráfico, en forma de “mapa de calor” donde se da una predicción de la nota de los individuos cruzando por status social, tamaño de la ciudad y tamaño de clase.

Lo primero que vemos: la mayor diferencia entre una clase pequeña y una grande ocurres en las aulas de lugares pequeños y nivel social bajo: 37 puntos de diferencia que, dado el promedio de sus resultados, hablamos de un 10% de diferencia. En el otro extremo, encontramos la escasa diferencia entre las notas de una gran ciudad con ingresos altos (hay 4 puntos de diferencia entre estar en una clase pequeña y una grande) y, algo más relevante, 26 puntos de diferencia en el status económico alto pero viviendo en una población pequeña. Respecto a la clase media, el efecto- de nuevo- con algo de interés está en los pueblos pequeños. Es decir, no encontramos unos efectos muy sorprendentes ni elevados. La clase social predice, en todo caso, una nota promedio superior, según se avanza en el status y, por contra, el tamaño de la clase parece ser relevante en los pueblos y ciudades pequeñas.

Más y más cosas:

1.- Todo este proceso nos ha llevado a pensar que la mejor pregunta a la que hemos podido llegar es algo así: ciudad pequeña versus ciudad grande, el efecto del tamaño del aula sobre el resultado académico.

2.- En los vídeos, Jesús Gonzalo, dice: cuando hay heterogeneidad, la regresión en la media- la standard- no nos dice nada. Hay que ir a una regresión cuartílica Busca información sobre este tipo de regresión y trata de estimar un modelo acorde a lo que hemos estudiado aquí. Realiza predicciones similares y compara resultados

3.- En todo este trabajo se ha asumido que el “efecto país” no es relevante. Quizás sea una hipótesis demasiado fuerte y hay países que, por algún motivo (diseño curricular, etc…) sean mejores por sistema en Matemáticas que otros. Prueba a realizar un estudio similar utilizando como nota la desviación de cada alumno con respecto a la media de su país. ¿Se mantienen los resultados?