Sinopsis
Los resultados de la regresión pueden tener un valor limitado cuando se interpretan cuidadosamente. Las formas inevitables de variación harán que las estimaciones de los coeficientes se reduzcan sustancialmente hacia cero. Se necesita un mejor modelo que maneje la variación de una manera más apropiada.
(Se puede construir un modelo de máxima verosimilitud, pero puede ser impracticable debido al cálculo necesario, que implica la evaluación numérica de integrales multidimensionales. El número de dimensiones es igual al número de estudiantes matriculados en las clases).
Introducción
Como narración para informar nuestra intuición, imagine que estos 38 exámenes se dieron en 38 cursos separados durante un semestre en una escuela pequeña con una matrícula de 200 estudiantes universitarios. En una situación realista, esos estudiantes tendrán diferentes habilidades y experiencias. Como medidas sustitutivas de estas habilidades y experiencias que podríamos tomar, digamos, puntajes en las pruebas de matemáticas y verbales del SAT y el año en la universidad (1 a 4).
Por lo general, los estudiantes se inscribirán en cursos de acuerdo con sus habilidades e intereses. Los estudiantes de primer año toman cursos de introducción y los cursos de introducción están poblados principalmente por estudiantes de primer año. Los estudiantes de segundo año y los estudiantes de primer año y estudiantes de segundo año con talento toman los cursos avanzados y de posgrado. Esta selección estratifica parcialmente a los estudiantes. para que las habilidades innatas de los estudiantes dentro de cualquier clase sean típicamente más homogéneas que la difusión de habilidades en toda la escuela.
Por lo tanto, los estudiantes más capaces pueden obtener una calificación cercana al final de las clases difíciles y avanzadas en las que se inscriben, mientras que los estudiantes menos capaces pueden obtener una calificación cercana a la parte superior de las clases introductorias fáciles que toman. Esto puede confundir un intento directo de relacionar los rangos del examen directamente con los atributos de los estudiantes y las clases.
Análisis
Indice a los estudiantes con y deje que los atributos del estudiante i sean dados por el vector x i . Indice las clases con j y deje que los atributos de la clase j sean dados por el vector z j . El conjunto de estudiantes matriculados en la clase j es A jiixijjzjjAj .
Asumir la "fuerza" de cada estudiante es una función de sus atributos más algo de valor aleatorio, que puede así tener media cero:si
si=f(xi,β)+εi.
Modelamos el examen en la clase agregando valores aleatorios independientes a la fortaleza de cada estudiante inscrito en la clase y convirtiéndolos en rangos. Por lo tanto, si el estudiante i está inscrito en la clase j , su rango relativo r i , j está determinado por su posición en la matriz ordenada de valoresjijri,j
(sk+δk,j,k∈Aj).
Esta posición se divide por uno más que la inscripción total de la clase para dar la variable dependiente, el rango de porcentaje:ri,j
pi,j=ri,j1+|Aj|.
Afirmo que los resultados de la regresión dependen (bastante) de los tamaños y la estructura de los valores aleatorios (no observados) y δ i , j . εiδi,j Los resultados también dependen precisamente de cómo se matriculan los estudiantes en las clases. Esto debería ser intuitivamente obvio, pero lo que no es tan obvio, y parece difícil de analizar teóricamente, es cómo y cuánto afectan los valores no observados y las estructuras de clase a la regresión.
Simulación
Sin demasiado esfuerzo podemos simular esta situación para crear y analizar algunos datos de muestra. Una ventaja de la simulación es que puede incorporar verdadero fortalezas de los estudiantes, que en realidad no son observables. Otra es que podemos variar los tamaños típicos de los valores no observados, así como las asignaciones de clase. Esto proporciona una "caja de arena" para evaluar los métodos analíticos propuestos, como la regresión.
Para comenzar, configuremos el generador de números aleatorios para obtener resultados reproducibles y especifiquemos el tamaño del problema. Lo uso R
porque está disponible para cualquiera.
set.seed(17)
n.pop <- 200 # Number of students
n.classes <- 38 # Number of classes
courseload <- 4.5 # Expected number of classes per student
Para proporcionar realismo, cree n.classes
clases de dificultades variables en dos escalas (matemática y verbal, con una correlación negativa), realizadas en diferentes niveles académicos (que van desde 1 = introductorio a 7 = investigación), y con facilidad variable. (En una clase "fácil", las diferencias entre las cantidades de aprendizaje de los estudiantes pueden ser grandes y / o el examen puede proporcionar poca discriminación entre los estudiantes. Esto se modela mediante términos aleatorios que, para la clase j, tienden a ser grandes Los resultados del examen serán casi impredecibles a partir de los datos de fortaleza del alumno. Cuando la clase no es "fácil", estos términos aleatorios son insignificantemente pequeños y las fortalezas del alumno pueden determinar perfectamente la clasificación del examen).δi,jj
classes <- data.frame(cbind(
math <- runif(n.classes),
rbeta(n.classes, shape1=(verbal <- (1-math)*5), shape2=5-verbal),
runif(n.classes, min=0, max=7),
rgamma(n.classes, 10, 10)))
rm(math, verbal)
colnames(classes) <- c("math.dif", "verbal.dif", "level", "ease")
classes <- classes[order(classes$math.dif + classes$verbal.dif + classes$level), ]
row.names(classes) <- 1:n.classes
plot(classes, main="Classes")
Los estudiantes se reparten entre los cuatro años y están dotados de valores aleatorios de sus atributos. No hay correlaciones entre ninguno de estos atributos:
students <- data.frame(cbind(
as.factor(ceiling(runif(n.pop, max=4))),
sapply(rnorm(n.pop, mean=60, sd=10), function(x) 10*median(c(20, 80, floor(x)))),
sapply(rnorm(n.pop, mean=55, sd=10), function(x) 10*median(c(00, 80, floor(x)))),
rnorm(n.pop)
))
colnames(students) <- c("year", "math", "verbal", "ability")
plot(students, main="Students")
El modelo es que cada estudiante tiene una "fuerza" inherente determinada en parte por sus atributos y en parte por su "habilidad", que es el valor . Los coeficientes de fuerza , que determinan la fuerza en términos de otros atributos, son lo que el análisis de datos posterior buscará estimar. Si quieres jugar con esta simulación, hazlo cambiando . El siguiente es un conjunto interesante y realista de coeficientes que reflejan el aprendizaje continuo de los estudiantes durante la universidad (con una gran cantidad entre los años 2 y 3); donde 100 puntos en cada parte del SAT valen aproximadamente un año de escuela; y donde aproximadamente la mitad de la variación se debe a los valores de "capacidad" no capturados por los puntajes del SAT o el año en la escuela.εibeta
beta
beta <- list(year.1=0, year.2=1, year.3=3, year.4=4, math=1/100, verbal=1/100, ability=2, sigma=0.01)
students$strength <- (students$year==1)*beta$year.1 +
(students$year==2)*beta$year.2 +
(students$year==3)*beta$year.3 +
(students$year==4)*beta$year.4 +
students$math*beta$math +
students$verbal*beta$verbal +
students$ability*beta$ability
students <- students[order(students$strength), ]
row.names(students) <- 1:n.pop
(Tenga en cuenta que students$ability
no es observable: es una desviación aparentemente aleatoria entre la fuerza predicha de los otros atributos observables y la fuerza real en los exámenes. Para eliminar este efecto aleatorio, establecer beta$ability
en cero. beta$sigma
Multiplicará los ease
valores: es básicamente la desviación estándar de relación con el rango de fortalezas de los estudiantes en un curso dado. Valores alrededor de .01 a .2 más o menos me parecen razonables).δi,j.01.2
Deje que los estudiantes elijan cursos que coincidan con sus habilidades Una vez que lo hacen, podemos calcular los tamaños de clase y classes
guardarlos con el marco de datos para su uso posterior. El valor de spread
en la assignments <-...
línea determina qué tan cerca los estudiantes están divididos en clases por habilidad. Un valor cercano a esencialmente combina a los estudiantes más débiles con los cursos más fáciles. Un valor cercano al número de clases distribuye a los estudiantes un poco más. Valores mucho más grandes que eso comienzan a volverse poco realistas, porque tienden a colocar a los estudiantes más débiles en los cursos más difíciles.0
pick.classes <- function(i, k, spread) {
# i is student strength rank
# k is number to pick
p <- pmin(0.05, diff(pbeta(0:n.classes/n.classes, i/spread, (1+n.pop-i)/spread)))
sample(1:n.classes, k, prob=p)
}
students$n.classes <- floor(1/2 + 2 * rbeta(n.pop,10,10) * courseload)
assignments <- lapply(1:n.pop, function(i) pick.classes(i, students$n.classes[i], spread=1))
enrolment <- function(k) length(seq(1, n.pop)[sapply(assignments, function(x) !is.na(match(k, x)))])
classes$size <- sapply(1:n.classes, enrolment)
classes$variation <- by(data, data$Class, function(x) diff(range(x$strength)))
(Como ejemplo de lo que ha logrado este paso, vea la figura más abajo).
Ahora aplique el modelo: las habilidades de los estudiantes en cada clase varían de forma independiente, más para exámenes fáciles, menos para exámenes difíciles (discriminatorios), para determinar sus puntajes de examen. Estos se resumen como rangos y "travesuras", que son porcentajes de rango. Las bromas para una clase de estudiantes varían de 1 / ( n + 1 ) a n / ( n + 1 ) en incrementos de 1 / ( n + 1 ) . Más adelante, esto permitirá aplicar transformaciones, como la función logística (que no está definida cuando se aplica a valores den1/(n+1)n/(n+1)1/(n+1) o 1 ).01
exam.do <- function(k) {
s <- seq(1, n.pop)[sapply(assignments, function(x) !is.na(match(k, x)))]
e <- classes$ease[k]
rv <- cbind(rep(k, length(s)), s, order(rnorm(length(s), students$strength[s], sd=e*beta$sigma*classes$variation[k])))
rv <- cbind(rv, rv[,3] / (length(s)+1))
dimnames(rv) <- list(NULL, c("Class", "Student", "Rank", "Prank"))
rv
}
data.raw <- do.call(rbind, sapply(1:n.classes, exam.do))
A estos datos en bruto adjuntamos los atributos del alumno y la clase para crear un conjunto de datos adecuado para el análisis:
data <- merge(data.raw, classes, by.x="Class", by.y="row.names")
data <- merge(data, students, by.x="Student", by.y="row.names")
Orientémonos inspeccionando una muestra aleatoria de los datos:
> data[sort(sample(1:dim(data)[1], 5)),]
Row Student Class Rank Prank math.dif verbal.dif level ease Size year math verbal ability strength n.classes
118 28 1 22 0.957 0.77997 6.95e-02 0.0523 1.032 22 2 590 380 0.576 16.9 4
248 55 5 24 0.889 0.96838 1.32e-07 0.5217 0.956 26 3 460 520 -2.163 19.0 5
278 62 6 22 0.917 0.15505 9.54e-01 0.4112 0.497 23 2 640 510 -0.673 19.7 4
400 89 10 16 0.800 0.00227 1.00e+00 1.3880 0.579 19 1 800 350 0.598 21.6 5
806 182 35 18 0.692 0.88116 5.44e-02 6.1747 0.800 25 4 610 580 0.776 30.7 4
El registro 118, por ejemplo, dice que el estudiante # 28 se matriculó en la clase # 1 y obtuvo el puesto 22 (desde abajo) en el examen para un rango de porcentaje de 0.957. El nivel general de dificultad de esta clase fue 0.0523 (muy fácil). Se inscribieron un total de 22 estudiantes. Este estudiante es un estudiante de segundo año (año 2) con 590 matemáticas, 380 puntajes verbales del SAT. Su fuerza académica general inherente es de 16.9. Estaban inscritos en cuatro clases en el momento.
Este conjunto de datos se corresponde con la descripción en la pregunta. Por ejemplo, los rangos de porcentaje son casi uniformes (como deben ser para cualquier conjunto de datos completo, porque los rangos de porcentaje para una sola clase tienen una distribución uniforme discreta).
Recuerde, en virtud de los coeficientes en beta
, este modelo ha asumido una fuerte conexión entre los puntajes de los exámenes y las variables que se muestran en este conjunto de datos. Pero, ¿qué muestra la regresión? Regresemos la logística de la clasificación porcentual contra todas las características observables de los estudiantes que podrían estar relacionadas con sus habilidades, así como los indicadores de dificultad de clase:
logistic <- function(p) log(p / (1-p))
fit <- lm(logistic(Prank) ~ as.factor(year) + math + verbal + level, data=data)
summary(fit)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.577788 0.421579 -6.11 1.5e-09 ***
as.factor(year)2 0.467846 0.150670 3.11 0.0020 **
as.factor(year)3 0.984671 0.164614 5.98 3.2e-09 ***
as.factor(year)4 1.109897 0.171704 6.46 1.7e-10 ***
math 0.002599 0.000538 4.83 1.6e-06 ***
verbal 0.002130 0.000514 4.14 3.8e-05 ***
level -0.208495 0.036365 -5.73 1.4e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.48 on 883 degrees of freedom
Multiple R-squared: 0.0661, Adjusted R-squared: 0.0598
F-statistic: 10.4 on 6 and 883 DF, p-value: 3.51e-11
Las gráficas de diagnóstico ( plot(fit)
) parecen fastásticas: los residuos son homoscedasticos y bellamente normales (aunque de cola ligeramente corta, lo cual no es problema); sin valores atípicos; y ninguna influencia desfavorable en ninguna observación.
3.5(−9,1.6,3.4,3.9,0.009,0.007,−0.7)(∗,1,3,4,0.010,0.010,∗)∗ representa un coeficiente que no se especificó explícitamente).
level
07level
(Por cierto, el uso de los rangos de porcentaje no transformados en la regresión no cambia cualitativamente los resultados informados a continuación).
spread
138
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.902006 0.349924 -14.01 < 2e-16 ***
as.factor(year)2 0.605444 0.130355 4.64 3.9e-06 ***
as.factor(year)3 1.707590 0.134649 12.68 < 2e-16 ***
as.factor(year)4 1.926272 0.136595 14.10 < 2e-16 ***
math 0.004667 0.000448 10.41 < 2e-16 ***
verbal 0.004019 0.000434 9.25 < 2e-16 ***
level -0.299475 0.026415 -11.34 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.3 on 883 degrees of freedom
Multiple R-squared: 0.282, Adjusted R-squared: 0.277
F-statistic: 57.9 on 6 and 883 DF, p-value: <2e-16
spread
38spread
1
Esta vez, el R cuadrado se ha mejorado mucho (aunque todavía no es genial). Sin embargo, todos los coeficientes han aumentado en un 20 - 100%. Esta tabla los compara junto con algunas simulaciones adicionales:
Simulation Intercept Year.2 Year.3 Year.4 Math Verbal Level R^2
Beta * 1.0 3.0 4.0 .010 .010 * *
Spread=1 -2.6 0.5 1.0 1.1 .003 .002 -0.21 7%
Spread=38 -4.9 0.6 1.7 1.9 .005 .004 -0.30 25%
Ability=1 -8.3 0.9 2.6 3.3 .008 .008 -0.63 58%
No error -11.2 1.1 3.3 4.4 .011 .011 -0.09 88%
spread
38y cambiando ability
de2 a 1(que es una evaluación muy optimista de cuán predecibles son las fortalezas de los estudiantes) arrojó la penúltima línea. Ahora las estimaciones (para el año del estudiante y los puntajes del SAT del estudiante) se están acercando razonablemente a los valores reales. Por último, el establecimiento de ambos ability
y sigma
al0 0, para eliminar los términos de error εyo y δi , jen conjunto, da una alta R al cuadrado y produce estimaciones cercanas a los valores correctos. (Es de destacar que el coeficiente para level
entonces disminuye en un orden de magnitud).
Este análisis rápido muestra que la regresión, al menos como se realiza aquí, va a confundir formas inevitables de variación con los coeficientes. Además, los coeficientes también dependen (en cierta medida) de cómo se distribuyen los estudiantes entre las clases. Esto puede acomodarse parcialmente al incluir atributos de clase entre las variables independientes en la regresión, como se hace aquí, pero aun así el efecto de la distribución del estudiante no desaparece.
Cualquier falta de previsibilidad del rendimiento real de los estudiantes, y cualquier variación en el aprendizaje de los estudiantes y el rendimiento real en los exámenes, aparentemente hacen que las estimaciones de los coeficientes se reduzcan a cero. Parecen hacerlo de manera uniforme, lo que sugiere que los coeficientes relativos aún pueden ser significativos.