Pourquoi l'ANOVA est-elle équivalente à la régression linéaire?

50

J'ai lu que l'ANOVA et la régression linéaire sont la même chose. Comment peut-il en être ainsi si on considère que la sortie de l'ANOVA produit une valeur de et une valeur de p sur la base de laquelle vous concluez si la moyenne des échantillons d'un échantillon à l'autre est identique ou différente.Fp

Mais en supposant que les moyennes ne soient pas égales (hypothèse de rejet nul), ANOVA ne vous dit rien sur les coefficients du modèle linéaire. Alors, comment la régression linéaire est-elle la même chose que l'ANOVA?

Victor
la source

Réponses:

44

ANOVA et régression linéaire sont équivalentes lorsque les deux modèles testent contre les mêmes hypothèses et utilisent un codage identique. Les modèles diffèrent par leur objectif de base: l'ANOVA vise principalement à présenter les différences entre les moyennes des catégories dans les données, tandis que la régression linéaire consiste principalement à estimer une réponse moyenne de l'échantillon et un associé .σ2

Un peu aphoriquement, on peut décrire ANOVA comme une régression avec des variables factices. Nous pouvons facilement voir que c'est le cas dans la régression simple avec des variables catégorielles. Une variable catégorique sera codée en tant que matrice indicatrice (une matrice 0/1selon que le sujet fait partie d’un groupe donné ou non), puis utilisée directement pour la résolution du système linéaire décrit par une régression linéaire. Voyons un exemple avec 5 groupes. Par souci d'argumentation, je supposerai que la moyenne group1égale à 1, la moyenne group2égale à 2, ... et la moyenne group5égale à 5. (J'utilise MATLAB, mais la même chose est équivalente dans 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

Comme on peut le voir dans ce scénario, les résultats sont exactement les mêmes. La différence numérique minime est due au fait que la conception n'est pas parfaitement équilibrée, ainsi qu'à la procédure d'estimation sous-jacente; L'ANOVA accumule les erreurs numériques un peu plus agressivement. À cet égard, nous convenons d'une interception LRbetas(1); nous pourrions adapter un modèle sans interception, mais ce ne serait pas une régression linéaire "standard". (Dans ce cas, les résultats seraient encore plus proches de l'ANOVA.)

F

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

En effet, les procédures testent la même hypothèse mais avec des formulations différentes: ANOVA vérifiera qualitativement si " le ratio est suffisamment élevé pour suggérer qu'aucun regroupement n'est invraisemblable ", tandis que la régression linéaire vérifiera qualitativement si " le ratio est suffisamment élevé pour suggérer une interception uniquement. le modèle est peut-être inadéquat ".
(Ceci est une interprétation assez libre de la " possibilité de voir une valeur égale ou supérieure à celle observée sous l'hypothèse nulle " et elle n'est pas censée être une définition de manuel.)

β, etc. Clairement, lorsque l’on commence à ajouter plusieurs covariables dans son modèle de régression, une ANOVA simple à un facteur n’a pas d’équivalence directe. Dans ce cas, on augmente l'information utilisée pour calculer la réponse moyenne de la régression linéaire avec des informations qui ne sont pas directement disponibles pour une ANOVA à un facteur. Je crois que l'on peut ré-exprimer les choses en termes d'ANOVA une fois de plus, mais il s'agit surtout d'un exercice académique.

Un article intéressant à ce sujet est le document de Gelman de 2005 intitulé: Analyse de la variance - Pourquoi il est plus important que jamais . Quelques points importants soulevés; Je ne suis pas totalement en faveur du document (je pense personnellement aligner beaucoup plus avec le point de vue de McCullach) mais cela peut être une lecture constructive.

Pour terminer, le graphique s’épaissit lorsque vous avez des modèles à effets mixtes . Vous avez des concepts différents sur ce qui peut être considéré comme une nuisance ou des informations réelles concernant le regroupement de vos données. Ces questions sortent du cadre de cette question mais je pense qu’elles méritent un signe de tête.

usεr11852 dit Réintégrer Monic
la source
6
La réponse acceptée sur cette page de validation croisée montre également la relation entre ANOVA et régression très bien, via une approche mathématique qui complète bien l'approche pratique de cette réponse.
EdM
+1 Oh oui, la réponse de @ MichaelHardy est assez bonne dans ce fil. Merci de le mentionner!
usεr11852 dit Rétablir Monic
+1, en outre, je pense que ce chiffre dans cette réponse est vraiment utile pour combler le fossé entre ANOVA et régression linéaire
Haitao Du
Seriez-vous d'accord pour dire que l'ANOVA est un GLM gaussien avec des prédicteurs catégoriques?
Digio
@ Digio: Non, cela simplifierait à l'excès la pertinence de leur utilisation; Je garderais GLM en dehors de l'image.
usεr11852 dit Rétablir Monic
55

Permettez-moi de mettre un peu de couleur dans l’idée que les MLS avec des régresseurs catégoriels ( codés factices ) sont équivalents aux facteurs de la ANOVA. Dans les deux cas, il existe des niveaux (ou des groupes dans le cas de l'ANOVA).

Dans la régression MCO, il est très courant d'avoir également des variables continues dans les régresseurs. Celles-ci modifient logiquement la relation dans le modèle d'ajustement entre les variables catégorielles et la variable dépendante (DC). Mais pas au point de rendre le parallèle méconnaissable.

Sur la mtcarsbase de l'ensemble de données, nous pouvons tout d'abord visualiser le modèle lm(mpg ~ wt + as.factor(cyl), data = mtcars)comme la pente déterminée par la variable continue wt(poids), puis par les différentes conversations interceptées projetant l'effet de la variable catégorielle cylinder(quatre, six ou huit cylindres). C’est cette dernière partie qui constitue un parallèle avec une ANOVA à un facteur.

Voyons cela graphiquement sur la sous-parcelle à droite (les trois sous-parcelles à gauche sont incluses à des fins de comparaison côte à côte avec le modèle ANOVA décrit immédiatement après):

entrez la description de l'image ici

Chaque moteur cylindrique est codé par couleur et la distance entre les lignes ajustées avec des interceptions différentes et le nuage de données est équivalente à la variation intra-groupe dans une ANOVA. Notez que les interceptions dans le modèle OLS avec une variable continue ( weight) ne sont pas mathématiquement identiques à la valeur des différentes moyennes intra-groupe dans ANOVA, en raison de l'effet de weightet des différentes matrices de modèle (voir ci-dessous): la moyenne mpgde voitures 4 cylindres, par exemple, est mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364, alors que l'OLS « base » interception (reflétant par convention cyl==4( le plus bas pour les plus en R chiffres ordonnant)) est nettement différent: summary(fit)$coef[1] #[1] 33.99079. La pente des lignes est le coefficient de la variable continue weight.

Si vous essayez de supprimer l'effet weighten redressant mentalement ces lignes et en les ramenant à la ligne horizontale, vous obtiendrez le tracé ANOVA du modèle aov(mtcars$mpg ~ as.factor(mtcars$cyl))sur les trois sous-tracés à gauche. Le weightrégresseur est maintenant sorti, mais la relation entre les points et les différentes conversations interceptées est globalement préservée - nous faisons simplement une rotation dans le sens inverse des aiguilles d'une montre et étalons les tracés qui se chevauchaient auparavant pour chaque niveau différent (encore une fois, comme un moyen visuel de "voir" la connexion, pas comme une égalité mathématique, car nous comparons deux modèles différents!).

cylinder20x

Et c’est grâce à la somme de ces segments verticaux que nous pouvons calculer manuellement les résidus:

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)

Le résultat: SumSq = 301.2626et TSS - SumSq = 824.7846. Comparer aux:

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

Exactement le même résultat que de tester avec une ANOVA le modèle linéaire avec uniquement le catégorique cylindercomme régresseur:

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 

Nous voyons donc que les résidus - la partie de la variance totale non expliquée par le modèle - ainsi que la variance sont les mêmes, que vous appeliez une MCO de type lm(DV ~ factors)ou une ANOVA ( aov(DV ~ factors)): lorsque nous supprimons la modèle de variables continues nous nous retrouvons avec un système identique. De même, lorsque nous évaluons les modèles globalement ou sous la forme d'une ANOVA omnibus (pas de niveau par niveau), nous obtenons naturellement la même valeur p F-statistic: 39.7 on 2 and 29 DF, p-value: 4.979e-09.

Cela ne veut pas dire que le test de niveaux individuels produira des valeurs de p identiques. Dans le cas de MCO, nous pouvons invoquer summary(fit)et obtenir:

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 ***

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

En fin de compte, rien n’est plus rassurant que de jeter un coup d’œil sur le moteur sous le capot, qui n’est autre que les matrices du modèle et les projections dans l’espace des colonnes. Celles-ci sont en réalité assez simples dans le cas d'une ANOVA:

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

cyl 4cyl 6cyl 8yij=μi+ϵijμijiyij

Par ailleurs, la matrice de modèle pour une régression OLS est la suivante:

[y1y2y3y4yn]=[1x12x131x22x231x32x331x42x431xn2xn3][β0β1β2]+[ε1ε2ε3ε4εn]

yi=β0+β1xi1+β2xi2+ϵiβ0β1β2weightdisplacement

lm(mpg ~ wt + as.factor(cyl), data = mtcars)weightβ0weightβ11cyl 4cyl 411(1),cyl 6cyl 8

[y1y2y3y4y5yn]=[1x11x21x31x41x51xn][β0β1]+[101010010101][μ~2μ~3]+[ε1ε2ε3ε4ε5εn]

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)

1μ~3yi=β0+β1xi+μ~i+ϵi

Antoni Parellada
la source
6
+1, j'adore ton illustration graphique !! qualité de publication!
Haitao Du
@ hxd1011 C'est très gentil de votre part. Je vous en suis reconnaissant.
Antoni Parellada
6

Antoni Parellada et USP11852 avaient une très bonne réponse. Je vais répondre à votre question pour la perspective de codage avec R.

ANOVA ne vous dit rien sur les coefficients du modèle linéaire. Alors, comment la régression linéaire est-elle la même chose que l'ANOVA?

En fait, nous pouvons aovfonctionner dans Rpeut être utilisé comme lm. Voici quelques exemples.

> 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

Comme vous pouvez le constater, non seulement nous pouvons obtenir un coefficient à partir du modèle ANOVA, mais nous pouvons également l’utiliser pour la prévision, tout comme pour le modèle linéaire.

Si nous vérifions la aovfonction du fichier d’aide, cela indique

Cela fournit une enveloppe à lm pour adapter des modèles linéaires à des conceptions expérimentales équilibrées ou non. La principale différence par rapport à lm réside dans la façon dont l’ajustement entre impression, résumé, etc., est exprimé dans le langage traditionnel de l’analyse de la variance plutôt que dans celui des modèles linéaires.

Haitao Du
la source
1

Si nous prenons toutes les entrées de données et les organisons dans une seule colonne Y, le reste des colonnes étant des variables indicatrices 1 {les données sont un élément de la jième colonne de la configuration originale de anova}, puis en prenant une régression linéaire simple de Y on Dans les autres colonnes (par exemple, la colonne B), vous devez obtenir les mêmes statistiques de test DF, SS, MS et F que dans votre problème ANOVA.

Ainsi, l'ANOVA peut être "traitée comme" une régression linéaire en écrivant les données avec des variables binaires. Notez également que le coefficient de régression pour, par exemple, une régression de Y sur B doit être identique à celui de moy. de la colonne B, calculée avec les données d'origine.

J. Taschereau
la source