Synopsis
Les résultats de la régression peuvent avoir une valeur limitée lorsqu'ils sont interprétés avec soin. Des formes de variation inévitables entraîneront une réduction substantielle des estimations de coefficient vers zéro. Un meilleur modèle est nécessaire pour gérer la variation de manière plus appropriée.
(Un modèle de maximum de vraisemblance peut être construit mais peut être impraticable en raison du calcul nécessaire, qui implique une évaluation numérique des intégrales multidimensionnelles. Le nombre de dimensions est égal au nombre d'élèves inscrits dans les classes.)
introduction
Pour raconter notre intuition, imaginez que ces 38 examens ont été dispensés dans 38 cours distincts pendant un semestre dans une petite école avec 200 étudiants inscrits. Dans une situation réaliste, ces élèves auront différentes capacités et expériences. En tant que mesures de substitution de ces capacités et expériences, nous pourrions prendre, par exemple, des scores aux tests SAT de mathématiques et verbaux et l'année au collège (1 à 4).
En règle générale, les étudiants s'inscriront à des cours en fonction de leurs capacités et de leurs intérêts. Les étudiants de première année suivent des cours d'introduction et les cours d'initiation sont principalement dispensés par des étudiants de première année. Les classes supérieures et les étudiants de première année et les étudiants de deuxième année talentueux suivent les cours de niveau avancé et supérieur. Cette sélection stratifie partiellement les étudiants sorte que les capacités innées des élèves au sein de n'importe quelle classe sont généralement plus homogènes que la répartition des capacités à travers l'école.
Ainsi, les élèves les plus capables peuvent se retrouver près du bas des classes avancées et difficiles auxquelles ils s'inscrivent, tandis que les élèves les moins capables peuvent marquer près du haut des classes d'introduction faciles qu'ils suivent. Cela peut confondre une tentative directe de relier les classements d'examen directement aux attributs des étudiants et des classes.
Une analyse
Indexez les élèves avec et laissez les attributs de l'élève i être donnés par le vecteur x i . Indexez les classes avec j et laissez les attributs de la classe j être donnés par le vecteur z j . L'ensemble des élèves inscrits en classe j est A jjejeXjejjzjjUNEj .
Supposons que la «force» de chaque élève est fonction de leurs attributs plus une valeur aléatoire, qui peut également avoir une moyenne nulle:sje
sje= f( xje, β) + εje.
Nous modélisons l'examen en classe en ajoutant des valeurs aléatoires indépendantes à la force de chaque élève inscrit dans la classe et en les convertissant en rangs. D'où, si l'élève i est inscrit dans la classe j , son rang relatif r i , j est déterminé par sa position dans le tableau de valeurs triéjjejri , j
( sk+ δk , j, k ∈ Aj) .
Ce poste est divisé par un de plus que l'effectif total de la classe pour donner à la variable dépendante, le rang en pourcentage:ri , j
pi , j= ri , j1 + | UNEj|.
Je prétends que les résultats de la régression dépendent (pas mal) des tailles et de la structure des valeurs aléatoires (non observées) et δ i , j . εjeδi , j Les résultats dépendent également précisément de la façon dont les étudiants sont inscrits dans les classes. Cela devrait être intuitivement évident, mais ce qui n'est pas si évident - et semble difficile à analyser théoriquement - c'est comment et combien les valeurs non observées et les structures de classe affectent la régression.
Simulation
Sans trop d'efforts, nous pouvons simuler cette situation pour créer et analyser des exemples de données. Un avantage de la simulation est qu'elle peut intégrer les véritables forces des étudiants, qui en réalité ne sont pas observables. Un autre est que nous pouvons faire varier les tailles typiques des valeurs non observées ainsi que les affectations de classe. Cela fournit un "bac à sable" pour évaluer les méthodes analytiques proposées telles que la régression.
Pour commencer, définissons le générateur de nombres aléatoires pour des résultats reproductibles et spécifions la taille du problème. J'utilise R
car il est accessible à tous.
set.seed(17)
n.pop <- 200 # Number of students
n.classes <- 38 # Number of classes
courseload <- 4.5 # Expected number of classes per student
Pour fournir du réalisme, créez des n.classes
classes de difficultés variables sur deux échelles (mathématique et verbale, avec une corrélation négative), menées à différents niveaux académiques (allant de 1 = introduction à 7 = recherche), et avec une facilité variable. (Dans une classe «facile», les différences entre les niveaux d'apprentissage des élèves peuvent être importantes et / ou l'examen peut fournir peu de discrimination entre les élèves. Ceci est modélisé par des termes aléatoires qui, pour la classe j ont tendance à être importants Les résultats de l'examen seront alors presque imprévisibles à partir des données sur la force des élèves. Lorsque la classe n'est pas "facile", ces termes aléatoires sont négligeables et les forces des élèves peuvent parfaitement déterminer le classement de l'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")
Les étudiants sont répartis sur les quatre années et dotés de valeurs aléatoires de leurs attributs. Il n'y a aucune corrélation entre aucun de ces attributs:
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")
εjebeta
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
students$ability
beta$ability
beta$sigma
ease
δi , j.01.2
classes
spread
assignments <-...
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)))
(Comme exemple de ce que cette étape a accompli, voir la figure ci-dessous.)
n1 / ( n + 1 )n/(n+1)1/(n+1) . Cela permettra ultérieurement d'appliquer des transformations telles que la fonction logistique (qui n'est pas définie lorsqu'elle est appliquée à des valeurs de01
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))
À ces données brutes, nous attachons les attributs étudiant et classe pour créer un ensemble de données adapté à l'analyse:
data <- merge(data.raw, classes, by.x="Class", by.y="row.names")
data <- merge(data, students, by.x="Student", by.y="row.names")
Orientons-nous en inspectant un échantillon aléatoire des données:
> 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
L'enregistrement 118, par exemple, indique que l'élève n ° 28 s'est inscrit dans la classe n ° 1 et a obtenu le 22e rang (à partir du bas) à l'examen pour un pourcentage de 0,957. Le niveau de difficulté global de cette classe était de 0,0523 (très facile). Au total, 22 étudiants étaient inscrits. Cet étudiant est un étudiant en deuxième année (année 2) avec 590 mathématiques, 380 scores SAT verbaux. Leur force académique inhérente globale est de 16,9. Ils étaient inscrits dans quatre classes à l'époque.
Cet ensemble de données correspond à la description de la question. Par exemple, les rangs en pourcentage sont en effet presque uniformes (comme ils doivent l'être pour tout ensemble de données complet, car les rangs en pourcentage pour une seule classe ont une distribution uniforme discrète).
Rappelez - vous, en vertu des coefficients beta
, ce modèle a pris une forte connexion entre les scores d'examen et les variables présentées dans cet ensemble de données. Mais que montre la régression? Regressons la logistique du rang en pourcentage par rapport à toutes les caractéristiques observables des élèves qui pourraient être liées à leurs capacités, ainsi qu'aux indicateurs de difficulté de la classe:
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
Les tracés de diagnostic ( plot(fit)
) semblent fastastiques: les résidus sont homoscédastiques et magnifiquement normaux (quoique légèrement à queue courte, ce qui ne pose aucun problème); pas de valeurs aberrantes; et aucune influence fâcheuse dans aucune observation.
3.5(−9,1.6,3.4,3.9,0.009,0.007,−0.7)(∗,1,3,4,0.010,0.010,∗)∗ représente un coefficient qui n'a pas été explicitement spécifié).
level
07level
(Soit dit en passant, l'utilisation des pourcentages non transformés dans la régression ne modifie pas qualitativement les résultats rapportés ci-dessous.)
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
Cette fois, le R-carré est beaucoup amélioré (bien que toujours pas génial). Cependant, tous les coefficients ont augmenté de 20 à 100%. Ce tableau les compare avec quelques simulations supplémentaires:
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
38ability
21ability
sigma
0εiδi,jlevel
Cette analyse rapide montre que la régression, au moins telle qu'elle est effectuée ici, va confondre les formes inévitables de variation avec les coefficients. En outre, les coefficients dépendent également (dans une certaine mesure) de la répartition des élèves entre les classes. Cela peut être partiellement pris en compte en incluant les attributs de classe parmi les variables indépendantes dans la régression, comme cela est fait ici, mais même ainsi, l'effet de la distribution des élèves ne disparaît pas.
Tout manque de prévisibilité des performances réelles des élèves, et toute variation de l'apprentissage des élèves et des performances réelles aux examens, font apparemment ramener les estimations des coefficients à zéro. Ils semblent le faire de manière uniforme, ce qui suggère que les coefficients relatifs peuvent encore être significatifs.