Consentitemi di dare un po 'di colore all'idea che OLS con regressori categorici ( con codice fittizio ) equivale ai fattori in ANOVA. In entrambi i casi ci sono livelli (o gruppi nel caso di ANOVA).
Nella regressione OLS è più comune avere anche variabili continue nei regressori. Questi modificano logicamente la relazione nel modello di adattamento tra le variabili categoriali e la variabile dipendente (DC). Ma non al punto di rendere irriconoscibile il parallelo.
Sulla base del mtcarsset di dati possiamo prima visualizzare il modello lm(mpg ~ wt + as.factor(cyl), data = mtcars)come la pendenza determinata dalla variabile continua wt(peso) e le diverse intercettazioni che proiettano l'effetto della variabile categoriale cylinder(quattro, sei o otto cilindri). È quest'ultima parte che forma un parallelo con un ANOVA a senso unico.
Vediamolo graficamente sulla trama secondaria a destra (i tre grafici secondari a sinistra sono inclusi per il confronto side-to-side con il modello ANOVA discusso subito dopo):

Ogni motore a cilindro ha un codice colore e la distanza tra le linee montate con intercettazioni diverse e la nuvola di dati è l'equivalente della variazione all'interno del gruppo in un ANOVA. Si noti che le intercettazioni nel modello OLS con una variabile continua ( weight) non sono matematicamente uguali al valore delle diverse weightmedie all'interno del gruppo in ANOVA, a causa dell'effetto e delle diverse matrici del modello (vedi sotto): la media mpgper vetture 4 cilindri, per esempio, viene mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364, mentre l'OLS "iniziale" intercettare (riflettente per convenzione cyl==4(crescente numeri ordinano in R)) è nettamente diverso: summary(fit)$coef[1] #[1] 33.99079. La pendenza delle linee è il coefficiente per la variabile continua weight.
Se provi a sopprimere l'effetto weightraddrizzando mentalmente queste linee e riportandole sulla linea orizzontale, finirai con il grafico ANOVA del modello aov(mtcars$mpg ~ as.factor(mtcars$cyl))sui tre sotto-grafici a sinistra. Il weightregressore è ora fuori, ma la relazione tra i punti e le diverse intercettazioni è mantenuta approssimativamente - stiamo semplicemente ruotando in senso antiorario e distribuendo i grafici precedentemente sovrapposti per ogni diverso livello (di nuovo, solo come dispositivo visivo per "vedere" la connessione; non come un'uguaglianza matematica, poiché stiamo confrontando due diversi modelli!).
Ogni livello nel fattore cylinderè separato e le linee verticali rappresentano i residui o l'errore all'interno del gruppo: la distanza da ciascun punto nella nuvola e la media per ogni livello (linea orizzontale con codice colore). Il gradiente di colore ci dà un'indicazione di quanto siano significativi i livelli nella validazione del modello: più i punti dati sono raggruppati attorno al loro gruppo significa, più è probabile che il modello ANOVA sia statisticamente significativo. La linea nera orizzontale intorno a in tutti i grafici è la media di tutti i fattori. I numeri nell'asse sono semplicemente il numero / identificativo segnaposto per ciascun punto all'interno di ciascun livello e non hanno altro scopo se non quello di separare i punti lungo la linea orizzontale per consentire una rappresentazione grafica diversa dai grafici a scatole.20x
Ed è attraverso la somma di questi segmenti verticali che possiamo calcolare manualmente i residui:
mu_mpg <- mean(mtcars$mpg) # Mean mpg in dataset
TSS <- sum((mtcars$mpg - mu_mpg)^2) # Total sum of squares
SumSq=sum((mtcars[mtcars$cyl==4,"mpg"]-mean(mtcars[mtcars$cyl=="4","mpg"]))^2)+
sum((mtcars[mtcars$cyl==6,"mpg"] - mean(mtcars[mtcars$cyl=="6","mpg"]))^2)+
sum((mtcars[mtcars$cyl==8,"mpg"] - mean(mtcars[mtcars$cyl=="8","mpg"]))^2)
Il risultato: SumSq = 301.2626e TSS - SumSq = 824.7846. Paragonare a:
Call:
aov(formula = mtcars$mpg ~ as.factor(mtcars$cyl))
Terms:
as.factor(mtcars$cyl) Residuals
Sum of Squares 824.7846 301.2626
Deg. of Freedom 2 29
Esattamente lo stesso risultato del test con un ANOVA il modello lineare con solo il categoriale cylindercome regressore:
fit <- lm(mpg ~ as.factor(cyl), data = mtcars)
summary(fit)
anova(fit)
Analysis of Variance Table
Response: mpg
Df Sum Sq Mean Sq F value Pr(>F)
as.factor(cyl) 2 824.78 412.39 39.697 4.979e-09 ***
Residuals 29 301.26 10.39
Ciò che vediamo, quindi, è che i residui - la parte della varianza totale non spiegata dal modello - così come la varianza sono gli stessi se chiami un OLS del tipo lm(DV ~ factors)o un ANOVA ( aov(DV ~ factors)): quando rimuoviamo il modello di variabili continue finiamo con un sistema identico. Allo stesso modo, quando valutiamo i modelli a livello globale o come ANOVA omnibus (non livello per livello), otteniamo naturalmente lo stesso valore p F-statistic: 39.7 on 2 and 29 DF, p-value: 4.979e-09.
Ciò non implica che il test dei singoli livelli produrrà valori p identici. Nel caso di OLS, possiamo invocare summary(fit)e ottenere:
lm(formula = mpg ~ as.factor(cyl), data = mtcars)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 26.6636 0.9718 27.437 < 2e-16 ***
as.factor(cyl)6 -6.9208 1.5583 -4.441 0.000119 ***
as.factor(cyl)8 -11.5636 1.2986 -8.905 8.57e-10 ***
Questo non è possibile in ANOVA, che è più di un test omnibus. Per ottenere questi tipi di valutazioni del valore è necessario eseguire un test Differenza significativa onesta Tukey, che cercherà di ridurre la possibilità di un errore di tipo I a seguito dell'esecuzione di confronti multipli a coppie (da qui " "), risultando in un uscita completamente diversa:pp adjusted
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = mtcars$mpg ~ as.factor(mtcars$cyl))
$`as.factor(mtcars$cyl)`
diff lwr upr p adj
6-4 -6.920779 -10.769350 -3.0722086 0.0003424
8-4 -11.563636 -14.770779 -8.3564942 0.0000000
8-6 -4.642857 -8.327583 -0.9581313 0.0112287
In definitiva, nulla è più rassicurante che dare una sbirciatina al motore sotto il cofano, che non è altro che le matrici del modello e le proiezioni nello spazio della colonna. Questi sono in realtà abbastanza semplici nel caso di un ANOVA:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮⋮⋮.yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11⋮00⋮.0000⋮11⋮.0000⋮00⋮.11⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢μ1μ2μ3⎤⎦⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢ε1ε2ε3⋮⋮⋮.εn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(1)
Questa sarebbe la matrice del modello ANOVA a una via con tre livelli (ad es cyl 4. cyl 6, cyl 8), Riassunta come , dove è la media per ogni livello o gruppo: quando viene aggiunto l'errore o il residuo per l'osservazione del gruppo o livello , otteniamo l' osservazione DV effettiva .yij=μi+ϵijμijiyij
D'altra parte, la matrice del modello per una regressione OLS è:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3y4⋮yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1111⋮1x12x22x32x42⋮xn2x13x23x33x43⋮xn3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢β0β1β2⎤⎦⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢ε1ε2ε3ε4⋮εn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
Questo è nella forma con una singola intercettazione e due pendenze ( e ) ciascuna per diverse variabili continue, diciamo e .yi=β0+β1xi1+β2xi2+ϵiβ0β1β2weightdisplacement
Il trucco ora è vedere come possiamo creare diverse intercettazioni, come nell'esempio iniziale, lm(mpg ~ wt + as.factor(cyl), data = mtcars)quindi liberiamoci della seconda pendenza e atteniamoci alla singola variabile continua originale weight(in altre parole, una singola colonna oltre alla colonna di quelle in la matrice del modello; l'intercetta e la pendenza per , ). La colonna di corrisponderà per impostazione predefinita all'intercetta. Ancora una volta, il suo valore non è identico alla media all'interno del gruppo ANOVA per , un'osservazione che non dovrebbe sorprendere confrontando la colonna di nella matrice del modello OLS (sotto) con la prima colonna diβ0weightβ11cyl 4cyl 411è nella matrice del modello ANOVA che seleziona solo esempi con 4 cilindri. L'intercettazione verrà spostata tramite codifica fittizia per spiegare l'effetto di e come segue:(1),cyl 6cyl 8
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3y4y5⋮yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11111⋮1x1x2x3x4x5⋮xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[β0β1]+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11100⋮000011⋮1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[μ~2μ~3]+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢ε1ε2ε3ε4ε5⋮εn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
Ora quando la terza colonna è sistematicamente l'intercettazione diLa indica che, come nel caso dell'intercetta "baseline" nel modello OLS non essendo identica alla media di gruppo delle auto a 4 cilindri, ma riflettendola, le differenze tra i livelli nel modello OLS non sono matematicamente le differenze tra i gruppi in significa:1μ~2.⋅~
fit <- lm(mpg ~ wt + as.factor(cyl), data = mtcars)
summary(fit)$coef[3] #[1] -4.255582 (difference between intercepts cyl==4 and cyl==6 in OLS)
fit <- lm(mpg ~ as.factor(cyl), data = mtcars)
summary(fit)$coef[2] #[1] -6.920779 (difference between group mean cyl==4 and cyl==6)
Allo stesso modo, quando la quarta colonna è , verrà aggiunto un valore fisso . L'equazione della matrice, quindi, sarà . Pertanto, passare con questo modello al modello ANOVA è solo una questione di sbarazzarsi delle variabili continue e capire che l'intercettazione predefinita in OLS riflette il primo livello in ANOVA.1μ~3yi=β0+β1xi+μ~i+ϵi