Perché ANOVA equivale alla regressione lineare?


50

Ho letto che ANOVA e regressione lineare sono la stessa cosa. Come può essere, considerando che l'output di ANOVA è un valore e un valore base ai quali si conclude se il campione significa che i diversi campioni sono uguali o diversi.pFp

Ma supponendo che i mezzi non siano uguali (rifiuta l'ipotesi nulla), ANOVA non dice nulla sui coefficienti del modello lineare. In che modo la regressione lineare è uguale all'ANOVA?

Risposte:


44

ANOVA e regressione lineare sono equivalenti quando i due modelli testano contro le stesse ipotesi e usano una codifica identica. I modelli differiscono nel loro obiettivo di base: ANOVA si preoccupa principalmente di presentare differenze tra le medie delle categorie nei dati, mentre la regressione lineare è principalmente preoccupata di stimare una risposta media campionaria e un associato .σ2

In qualche modo aforisticamente si può descrivere ANOVA come una regressione con variabili fittizie. Possiamo facilmente vedere che questo è il caso della semplice regressione con variabili categoriali. Una variabile categoriale verrà codificata come matrice indicatore (una matrice che 0/1dipende dal fatto che un soggetto faccia parte o meno di un determinato gruppo) e quindi utilizzata direttamente per la soluzione del sistema lineare descritta da una regressione lineare. Vediamo un esempio con 5 gruppi. Per ragioni di argomento, suppongo che la media di group1uguale a 1, la media di group2uguale a 2, ... e la media di group5uguale a 5. (Uso MATLAB, ma la stessa identica cosa è equivalente in R.)

rng(123);               % Fix the seed
X = randi(5,100,1);     % Generate 100 random integer U[1,5]
Y = X + randn(100,1);   % Generate my response sample
Xcat = categorical(X);  % Treat the integers are categories

% One-way ANOVA
[anovaPval,anovatab,stats] = anova1(Y,Xcat);
% Linear regression
fitObj = fitlm(Xcat,Y);

% Get the group means from the ANOVA
ANOVAgroupMeans = stats.means
% ANOVAgroupMeans =
% 1.0953    1.8421    2.7350    4.2321    5.0517

% Get the beta coefficients from the linear regression
LRbetas = [fitObj.Coefficients.Estimate'] 
% LRbetas =
% 1.0953    0.7468    1.6398    3.1368    3.9565

% Rescale the betas according the intercept
scaledLRbetas = [LRbetas(1) LRbetas(1)+LRbetas(2:5)]
% scaledLRbetas =
% 1.0953    1.8421    2.7350    4.2321    5.0517

% Check if the two results are numerically equivalent
abs(max( scaledLRbetas - ANOVAgroupMeans)) 
% ans =
% 2.6645e-15

Come si può vedere in questo scenario, i risultati sono esattamente gli stessi. La minima differenza numerica è dovuta al fatto che il progetto non è perfettamente bilanciato, nonché alla procedura di stima alla base; l'ANOVA accumula errori numerici un po 'più aggressivamente. A tale riguardo, inseriamo un'intercettazione LRbetas(1),; potremmo adattarci a un modello privo di intercettazioni ma non sarebbe una regressione lineare "standard". (I risultati sarebbero ancora più vicini all'ANOVA in quel caso però.)

La statistica (un rapporto dei mezzi) nel caso dell'ANOVA e nel caso della regressione lineare sarà la stessa per l'esempio sopra:F

abs( fitObj.anova.F(1) - anovatab{2,5} )
% ans =
% 2.9132e-13 

Questo perché le procedure testano la stessa ipotesi ma con formulazioni diverse: ANOVA verificherà qualitativamente se " il rapporto è abbastanza alto da suggerire che nessun raggruppamento è plausibile " mentre la regressione lineare controllerà qualitativamente se " il rapporto è abbastanza alto da suggerire solo un'intercetta il modello è probabilmente inadeguato ".
(Questa è un'interpretazione in qualche modo libera della " possibilità di vedere un valore uguale o maggiore di quello osservato sotto l'ipotesi nulla " e non intende essere una definizione da manuale.)

Tornando alla parte finale della tua domanda su " ANOVA non ti dice nulla sui coefficienti del modello lineare (supponendo che i mezzi non siano uguali ") Spero che ora tu possa vedere che ANOVA, nel caso in cui il tuo progetto è abbastanza semplice / equilibrato , ti dice tutto ciò che farebbe un modello lineare. Gli intervalli di confidenza per i gruppi sono gli stessi che hai per il tuoβ, ecc. Chiaramente quando uno inizia ad aggiungere più covariate nel suo modello di regressione, un semplice ANOVA a una via non ha un'equivalenza diretta. In tal caso si aumentano le informazioni utilizzate per calcolare la risposta media della regressione lineare con informazioni che non sono direttamente disponibili per un ANOVA a una via. Credo che si possano riesprimere le cose in termini ANOVA ancora una volta, ma è soprattutto un esercizio accademico.

Un articolo interessante sull'argomento è il documento di Gelman del 2005 intitolato: Analisi della varianza - Perché è più importante che mai . Alcuni punti importanti sollevati; Non sono pienamente favorevole al documento (penso che mi allineerò molto di più con l'opinione di McCullach) ma può essere una lettura costruttiva.

Come nota finale: la trama si infittisce quando si hanno modelli di effetti misti . Lì hai concetti diversi su ciò che può essere considerato un fastidio o informazioni effettive sul raggruppamento dei tuoi dati. Questi problemi non rientrano nell'ambito di questa domanda, ma penso che siano degni di un cenno del capo.


6
La risposta accettata in questa pagina con convalida incrociata mostra anche abbastanza bene la relazione tra ANOVA e regressione, attraverso un approccio matematico che integra perfettamente l'approccio pratico di questa risposta.
EdM

+1. Oh sì, la risposta di @ MichaelHardy è abbastanza buona in quella discussione. Grazie per averlo menzionato!
usεr11852 dice Reinstate Monic il

+1, inoltre, ritengo che questa cifra in questa risposta sia davvero utile per colmare il divario tra ANOVA e regressione lineare
Haitao Du,

Concorderesti che ANOVA è un GLM gaussiano con predittori categorici?
Digio

@Digio: No, semplificherebbe eccessivamente l'adeguatezza del loro utilizzo; Terrei GLM fuori dal quadro.
usεr11852 dice Reinstate Monic l'

55

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):

inserisci qui la descrizione dell'immagine

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:

(1)[y1y2y3.yn]=[100100010010...001001][μ1μ2μ3]+[ε1ε2ε3.εn]

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 è:

[y1y2y3y4yn]=[1x12x131x22x231x32x331x42x431xn2xn3][β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

[y1y2y3y4y5yn]=[1x11x21x31x41x51xn][β0β1]+[101010010101][μ~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


6
+1, adoro la tua illustrazione grafica !! qualità della pubblicazione!
Haitao Du,

@ hxd1011 Questo è molto carino da parte tua. Lo apprezzo.
Antoni Parellada,

6

Antoni Parellada e usεr11852 hanno avuto un'ottima risposta. Affronterò la tua domanda per la prospettiva di codifica con R.

ANOVA non dice nulla sui coefficienti del modello lineare. In che modo la regressione lineare è uguale all'ANOVA?

In effetti, possiamo aovfunzionare in Rpuò essere usato come lm. Ecco alcuni esempi.

> lm_fit=lm(mpg~as.factor(cyl),mtcars)

> aov_fit=aov(mpg~as.factor(cyl),mtcars)

> coef(lm_fit)
    (Intercept) as.factor(cyl)6 as.factor(cyl)8 
      26.663636       -6.920779      -11.563636 

> coef(aov_fit)
    (Intercept) as.factor(cyl)6 as.factor(cyl)8 
      26.663636       -6.920779      -11.563636 

> all(predict(lm_fit,mtcars)==predict(aov_fit,mtcars))
[1] TRUE

Come puoi vedere, non solo possiamo ottenere il coefficiente dal modello ANOVA, ma possiamo anche usarlo per la previsione, proprio come il modello lineare.

Se controlliamo il file di aiuto per la aovfunzione, dice

Ciò fornisce un involucro per lm per il montaggio di modelli lineari su progetti sperimentali bilanciati o sbilanciati. La differenza principale rispetto a lm sta nel modo in cui stampa, sommario e così via gestiscono l'adattamento: questo è espresso nel linguaggio tradizionale dell'analisi della varianza piuttosto che in quello dei modelli lineari.


1

Se prendiamo tutte le voci di dati e le disponiamo in una singola colonna Y, con il resto delle colonne che sono variabili dell'indicatore 1 {ith data is element of the jth column in the original anova organ}} allora prendendo una semplice regressione lineare di Y su una qualsiasi delle altre colonne (ad esempio colonna B), dovresti ottenere la stessa statistica di test DF, SS, MS e F del tuo problema ANOVA.

Pertanto ANOVA può essere "trattato come" regressione lineare scrivendo i dati con variabili binarie. Si noti inoltre che il coefficiente di regressione per, diciamo, una regressione di Y su B dovrebbe essere lo stesso della media. della colonna B, calcolata con i dati originali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.