Sinossi
I risultati della regressione possono avere un valore limitato se interpretati attentamente. Le inevitabili forme di variazione faranno sì che le stime dei coefficienti si riducano sostanzialmente verso lo zero. È necessario un modello migliore che gestisca le variazioni in un modo più appropriato.
(Un modello di massima verosimiglianza può essere costruito ma può essere impraticabile a causa del calcolo necessario, che comporta una valutazione numerica di integrali multidimensionali. Il numero di dimensioni è uguale al numero di studenti iscritti nelle classi.)
introduzione
Come narrativa per informare la nostra intuizione, immagina che questi 38 esami siano stati svolti in 38 corsi separati durante un semestre in una piccola scuola con l'iscrizione di 200 studenti universitari. In una situazione realistica quegli studenti avranno abilità ed esperienze diverse. Come misure surrogate di queste abilità ed esperienze potremmo prendere, diciamo, punteggi sulla matematica SAT e sui test verbali e l'anno al college (da 1 a 4).
In genere, gli studenti si iscriveranno ai corsi in base alle loro capacità e interessi. Le matricole seguono corsi introduttivi e i corsi introduttivi sono popolati principalmente da matricole. Upperclassmen e matricole di talento e studenti del secondo anno seguono corsi avanzati e di livello universitario. Questa selezione stratifica parzialmente gli studenti modo che le capacità innate degli studenti all'interno di qualsiasi classe siano in genere più omogenee della diffusione delle abilità in tutta la scuola.
Pertanto, gli studenti più capaci possono trovarsi a segnare vicino alla parte inferiore delle classi difficili e avanzate in cui si iscrivono, mentre gli studenti meno capaci possono segnare vicino alla cima delle classi introduttive facili che prendono. Ciò può confondere un tentativo diretto di mettere in relazione i gradi degli esami direttamente con gli attributi degli studenti e delle classi.
Analisi
Indicizza gli studenti con e lascia che gli attributi dello studente i siano dati dal vettore x i . Indicizza le classi con j e lascia che gli attributi della classe j siano dati dal vettore z j . L'insieme degli studenti iscritti alla classe j è A jiixijjzjjAj .
Assumere la "forza" di ogni studente è una funzione della loro attributi più qualche valore casuale, che può anche avere media zero:si
si=f(xi,β)+εi.
Modelliamo l'esame nella classe aggiungendo valori casuali indipendenti alla forza di ogni studente iscritto nella classe e convertendoli in gradi. Pertanto, se lo studente i è iscritto nella classe j , il suo grado relativo r i , j è determinato dalla loro posizione nella matrice ordinata di valorijijri,j
(sk+δk,j,k∈Aj).
Questa posizione è divisa per una in più rispetto alla registrazione totale della classe per dare alla variabile dipendente il grado percentuale:ri,j
pi,j=ri,j1+|Aj|.
Sostengo che i risultati della regressione dipendono (abbastanza) dalle dimensioni e dalla struttura dei valori casuali (non osservati) e δ i , j . εiδi,j I risultati dipendono anche da come gli studenti sono iscritti alle lezioni. Ciò dovrebbe essere intuitivamente ovvio, ma ciò che non è così ovvio - e sembra difficile da analizzare teoricamente - è come e quanto i valori non osservati e le strutture di classe influenzano la regressione.
Simulazione
Senza troppi sforzi possiamo simulare questa situazione per creare e analizzare alcuni dati di esempio. Un vantaggio della simulazione è che può incorporare i veri punti di forza degli studenti, che in realtà non sono osservabili. Un altro è che possiamo variare le dimensioni tipiche dei valori non osservati e le assegnazioni di classe. Ciò fornisce un "sandbox" per valutare i metodi analitici proposti come la regressione.
Per iniziare, impostiamo il generatore di numeri casuali per risultati riproducibili e specificiamo la dimensione del problema. Uso R
perché è disponibile per chiunque.
set.seed(17)
n.pop <- 200 # Number of students
n.classes <- 38 # Number of classes
courseload <- 4.5 # Expected number of classes per student
Per fornire realismo, creare n.classes
classi di difficoltà diverse su due scale (matematica e verbale, con una correlazione negativa), condotte a vari livelli accademici (che vanno da 1 = introduttivo a 7 = ricerca) e con facilità variabile. (In una classe "facile", le differenze tra le quantità di apprendimento degli studenti possono essere grandi e / o l'esame può fornire poca discriminazione tra gli studenti. Questo è modellato da termini casuali che, per la classe j tendono ad essere grandi I risultati dell'esame saranno quindi quasi imprevedibili dai dati sulla forza dello studente. Quando la lezione non è "facile", questi termini casuali sono trascurabilmente piccoli e i punti di forza dello studente possono determinare perfettamente la classifica dell'esame.)δ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")
Gli studenti sono distribuiti tra i quattro anni e dotati di valori casuali dei loro attributi. Non ci sono correlazioni tra nessuno di questi attributi:
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")
Il modello è che ogni studente ha una "forza" intrinseca determinata in parte dai suoi attributi e in parte dalla sua "abilità", che è il valore . I coefficienti di resistenza , che determinano la forza in termini di altri attributi, sono ciò che la successiva analisi dei dati cercherà di stimare. Se vuoi giocare con questa simulazione, fallo cambiando . Di seguito è riportato un insieme interessante e realistico di coefficienti che riflette l'apprendimento continuo degli studenti durante il college (con una grande quantità tra gli anni 2 e 3); dove 100 punti su ciascuna parte del SAT valgono circa un anno di scuola; e dove circa la metà della variazione è dovuta ai valori di "abilità" non rilevati dai punteggi SAT o dall'anno a scuola.ε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
(Tieni presente che students$ability
non è osservabile: si tratta di una deviazione apparentemente casuale tra la forza prevista dagli altri attributi osservabili e la forza effettiva degli esami. Per rimuovere questo effetto casuale, impostato beta$ability
su zero beta$sigma
, moltiplicheranno i ease
valori: è sostanzialmente la deviazione standard di rispetto alla gamma di punti di forza degli studenti in un determinato corso. I valori tra 0,01 e 0,2 circa mi sembrano ragionevoli.)δi,j.01.2
Lascia che gli studenti scelgano i corsi per abbinare le loro abilità. Una volta che lo fanno, possiamo calcolare le dimensioni della classe e riporre quelle con il classes
dataframe per un uso successivo. Il valore di spread
in the assignments <-...
line determina quanto gli studenti sono suddivisi in classi in base all'abilità. Un valore vicino a essenzialmente abbina gli studenti più deboli ai corsi più semplici. Un valore vicino al numero di classi diffonde gli studenti un po 'di più. Valori molto più grandi di quello iniziano a diventare irrealistici, perché tendono a mettere gli studenti più deboli nei corsi più difficili.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)))
(Come esempio di ciò che ha realizzato questo passaggio, vedere la figura più avanti).
Ora applica il modello: le abilità degli studenti di ogni classe sono variate indipendentemente - più per esami facili, meno per esami difficili (discriminanti) - per determinare i loro punteggi degli esami. Questi sono riassunti in gradi e "scherzi", che sono percentuali di rango. Gli scherzi per una classe di studenti vanno da 1 / ( n + 1 ) a n / ( n + 1 ) con incrementi di 1 / ( n + 1 ) . Ciò consentirà in seguito di applicare trasformazioni come la funzione logistica (che non è definita se applicata a valori din1/(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 questi dati grezzi alleghiamo gli attributi di classe e studente per creare un set di dati adatto all'analisi:
data <- merge(data.raw, classes, by.x="Class", by.y="row.names")
data <- merge(data, students, by.x="Student", by.y="row.names")
Orientiamoci ispezionando un campione casuale di dati:
> 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
Il record 118, ad esempio, afferma che lo studente n. 28 si è iscritto alla classe n. 1 e ha ottenuto il 22 ° (dal basso) nell'esame per un punteggio percentuale di 0,957. Il livello generale di difficoltà di questa classe era 0,0523 (molto facile). Sono stati arruolati 22 studenti. Questo studente è un secondo anno (2 ° anno) con 590 matematica, 380 punteggi SAT verbali. La loro forza accademica intrinseca complessiva è di 16,9. All'epoca erano iscritti in quattro classi.
Questo set di dati viene confrontato con la descrizione nella domanda. Ad esempio, i ranghi percentuali sono quasi uniformi (come devono essere per qualsiasi set di dati completo, poiché i ranghi percentuali per una singola classe hanno una distribuzione uniforme discreta).
Ricorda, in virtù dei coefficienti in beta
, questo modello ha assunto una forte connessione tra i punteggi degli esami e le variabili mostrate in questo set di dati. Ma cosa mostra la regressione? Ritiriamo la logistica della classifica percentuale rispetto a tutte le caratteristiche osservabili degli studenti che potrebbero essere correlate alle loro capacità, nonché agli indicatori di difficoltà di 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
I diagrammi diagnostici ( plot(fit)
) sembrano veloci: i residui sono omoscedastici e meravigliosamente normali (anche se leggermente corti, il che non è un problema); nessun valore anomalo; e nessuna influenza spiacevole in nessuna osservazione.
3.5(−9,1.6,3.4,3.9,0.009,0.007,−0.7)(∗,1,3,4,0.010,0.010,∗)∗ sta per un coefficiente che non è stato esplicitamente specificato).
level
07level
(A proposito, l'utilizzo dei gradi percentuali non trasformati nella regressione non modifica qualitativamente i risultati riportati di seguito.)
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
Questa volta l'R-quadrato è molto migliorato (anche se non ancora eccezionale). Tuttavia, tutti i coefficienti sono aumentati del 20 - 100%. Questa tabella li confronta con alcune simulazioni aggiuntive:
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
Questa rapida analisi mostra che la regressione, almeno come eseguita qui, confonderà le inevitabili forme di variazione con i coefficienti. Inoltre, i coefficienti dipendono (in una certa misura) da come gli studenti sono distribuiti tra le classi. Questo può essere parzialmente accolto includendo gli attributi di classe tra le variabili indipendenti nella regressione, come fatto qui, ma anche così l'effetto della distribuzione degli studenti non scompare.
Qualsiasi mancanza di prevedibilità delle prestazioni reali degli studenti e qualsiasi variazione dell'apprendimento degli studenti e delle prestazioni effettive durante gli esami, apparentemente fanno sì che le stime dei coefficienti si riducano verso lo zero. Sembrano farlo in modo uniforme, suggerendo che i coefficienti relativi possono essere ancora significativi.