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 mtcars
set 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 weight
medie all'interno del gruppo in ANOVA, a causa dell'effetto e delle diverse matrici del modello (vedi sotto): la media mpg
per 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 weight
raddrizzando 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 weight
regressore è 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.2626
e 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 cylinder
come 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β2weight
displacement
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 4
cyl 4
11è 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 6
cyl 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