¿Por qué ANOVA es equivalente a la regresión lineal?


50

Leí que ANOVA y la regresión lineal son lo mismo. ¿Cómo puede ser eso, considerando que la salida de ANOVA es algún valor de y algún valor de función del cual se concluye si las medias de muestra en las diferentes muestras son iguales o diferentes?pFp

Pero suponiendo que las medias no sean iguales (rechace la hipótesis nula), ANOVA no le dice nada sobre los coeficientes del modelo lineal. Entonces, ¿cómo es la regresión lineal lo mismo que ANOVA?

Respuestas:


44

ANOVA y regresión lineal son equivalentes cuando los dos modelos prueban contra las mismas hipótesis y usan una codificación idéntica. Los modelos difieren en su objetivo básico: ANOVA se preocupa principalmente por presentar diferencias entre las medias de las categorías en los datos, mientras que la regresión lineal se preocupa principalmente por estimar una respuesta media de la muestra y un asociado .σ2

Algo aforístico se puede describir ANOVA como una regresión con variables ficticias. Podemos ver fácilmente que este es el caso en la regresión simple con variables categóricas. Una variable categórica se codificará como una matriz indicadora (una matriz que 0/1depende de si un sujeto es parte de un grupo dado o no) y luego se usará directamente para la solución del sistema lineal descrito por una regresión lineal. Veamos un ejemplo con 5 grupos. En aras del argumento, supondré que la media de group1es igual a 1, la media de group2es igual a 2, ... y la media de group5es igual a 5. (uso MATLAB, pero exactamente lo mismo es equivalente en 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

Como se puede ver en este escenario, los resultados fueron exactamente los mismos. La mínima diferencia numérica se debe a que el diseño no está perfectamente equilibrado, así como al procedimiento de estimación subyacente; El ANOVA acumula errores numéricos un poco más agresivamente. A ese respecto encajamos una intercepción LRbetas(1),; podríamos ajustar un modelo sin intercepción, pero eso no sería una regresión lineal "estándar". (Sin embargo, los resultados estarían aún más cerca de ANOVA en ese caso).

La estadística (una razón de las medias) en el caso de ANOVA y en el caso de regresión lineal también será la misma para el ejemplo anterior:F

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

Esto se debe a que los procedimientos prueban la misma hipótesis pero con diferentes palabras: ANOVA verificará cualitativamente si " la relación es lo suficientemente alta como para sugerir que no hay agrupación no plausible ", mientras que la regresión lineal verificará cualitativamente si " la relación es lo suficientemente alta como para sugerir solo una intercepción el modelo es posiblemente inadecuado ".
(Esta es una interpretación algo libre de la " posibilidad de ver un valor igual o mayor al observado bajo la hipótesis nula " y no pretende ser una definición de libro de texto).

Volviendo a la parte final de su pregunta sobre " ANOVA no le dice nada sobre los coeficientes del modelo lineal (suponiendo que las medias no sean iguales ") Espero que ahora pueda ver que el ANOVA, en el caso de que su diseño es lo suficientemente simple / equilibrado , le dice todo lo que haría un modelo lineal. Los intervalos de confianza para los medios grupales serán los mismos que tiene para suβ, etc. Claramente, cuando uno comienza a agregar múltiples covariables en su modelo de regresión, un ANOVA unidireccional simple no tiene una equivalencia directa. En ese caso, se aumenta la información utilizada para calcular la respuesta media de la regresión lineal con información que no está directamente disponible para un ANOVA unidireccional. Creo que uno puede volver a expresar las cosas en términos de ANOVA una vez más, pero es principalmente un ejercicio académico.

Un artículo interesante sobre el tema es el documento de Gelman de 2005 titulado: Análisis de varianza: por qué es más importante que nunca . Algunos puntos importantes planteados; No apoyo totalmente el documento (creo que personalmente me alineo mucho más con el punto de vista de McCullach) pero puede ser una lectura constructiva.

Como nota final: la trama se complica cuando tienes modelos de efectos mixtos . Allí tiene diferentes conceptos sobre lo que puede considerarse una molestia o información real con respecto a la agrupación de sus datos. Estos problemas están fuera del alcance de esta pregunta, pero creo que son dignos de asentir.


66
La respuesta aceptada en esta página de validación cruzada también muestra la relación entre ANOVA y la regresión bastante bien, a través de un enfoque matemático que complementa muy bien el enfoque práctico de esta respuesta.
EdM

+1. Ah, sí, la respuesta de @ MichaelHardy es bastante buena en ese hilo. Gracias por mencionarlo!
usεr11852 dice Reinstate Monic el

+1, además, creo que esta cifra en esta respuesta es realmente útil para cerrar la brecha entre ANOVA y la regresión lineal
Haitao Du

¿Estaría de acuerdo en que ANOVA es un GLM gaussiano con predictores categóricos?
Digio

@Digio: No, simplificaría demasiado la conveniencia de su uso; Mantendría a GLM fuera de escena.
usεr11852 dice Reinstate Monic

55

Permítanme ponerle un poco de color a la idea de que OLS con regresores categóricos ( codificados de forma simulada ) es equivalente a los factores en ANOVA. En ambos casos hay niveles (o grupos en el caso de ANOVA).

En la regresión OLS, lo más habitual es tener también variables continuas en los regresores. Estos modifican lógicamente la relación en el modelo de ajuste entre las variables categóricas y la variable dependiente (DC). Pero no hasta el punto de hacer que el paralelo sea irreconocible.

Según el mtcarsconjunto de datos, primero podemos visualizar el modelo lm(mpg ~ wt + as.factor(cyl), data = mtcars)como la pendiente determinada por la variable continua wt(peso) y las diferentes intersecciones que proyectan el efecto de la variable categórica cylinder(cuatro, seis u ocho cilindros). Es esta última parte la que forma un paralelo con un ANOVA unidireccional.

Vamos a verlo gráficamente en la subtrama a la derecha (las tres subtramas a la izquierda se incluyen para la comparación de lado a lado con el modelo ANOVA discutido inmediatamente después):

ingrese la descripción de la imagen aquí

Cada motor de cilindro tiene un código de color, y la distancia entre las líneas ajustadas con diferentes intersecciones y la nube de datos es el equivalente a la variación dentro del grupo en un ANOVA. Observe que las intersecciones en el modelo OLS con una variable continua ( weight) no son matemáticamente iguales que el valor de las diferentes medias dentro del grupo en ANOVA, debido al efecto de weightlas diferentes matrices del modelo (ver más abajo): la media mpgpara coches de 4 cilindros, por ejemplo, está mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364, mientras que la intersección OLS "línea base" (que refleja por convención cyl==4(menor a mayor números de pedido en R)) es marcadamente diferente: summary(fit)$coef[1] #[1] 33.99079. La pendiente de las líneas es el coeficiente de la variable continua weight.

Si intentas suprimir el efecto de weightenderezar mentalmente estas líneas y devolverlas a la línea horizontal, terminarás con el diagrama ANOVA del modelo aov(mtcars$mpg ~ as.factor(mtcars$cyl))en las tres subtramas a la izquierda. El weightregresor ahora está fuera, pero la relación de los puntos a las diferentes intersecciones se conserva aproximadamente: simplemente estamos girando en sentido antihorario y extendiendo las parcelas previamente superpuestas para cada nivel diferente (de nuevo, solo como un dispositivo visual para "ver" la conexión; no como una igualdad matemática, ¡ya que estamos comparando dos modelos diferentes!).

Cada nivel en el factor cylinderes separado, y las líneas verticales representan los residuos o el error dentro del grupo: la distancia desde cada punto en la nube y la media de cada nivel (línea horizontal codificada por colores). El gradiente de color nos da una indicación de cuán significativos son los niveles en la validación del modelo: cuanto más agrupados estén los puntos de datos alrededor de su grupo significa, más probable es que el modelo ANOVA sea estadísticamente significativo. La línea negra horizontal alrededor de en todas las parcelas es la media de todos los factores. Los números en el eje son simplemente el número / identificador de marcador de posición para cada punto dentro de cada nivel, y no tienen otro propósito que separar los puntos a lo largo de la línea horizontal para permitir una visualización de trazado diferente a los diagramas de caja.20x

Y es a través de la suma de estos segmentos verticales que podemos calcular manualmente los residuos:

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)

El resultado: SumSq = 301.2626y TSS - SumSq = 824.7846. Comparar con:

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

Exactamente el mismo resultado que probar con un ANOVA el modelo lineal con solo el categórico cylindercomo regresor:

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 

Lo que vemos, entonces, es que los residuos, la parte de la varianza total no explicada por el modelo, así como la varianza son las mismas, ya sea que llame un OLS del tipo lm(DV ~ factors)o un ANOVA ( aov(DV ~ factors)): cuando quitamos el modelo de variables continuas terminamos con un sistema idéntico. De manera similar, cuando evaluamos los modelos globalmente o como un ANOVA omnibus (no nivel por nivel), naturalmente obtenemos el mismo valor p F-statistic: 39.7 on 2 and 29 DF, p-value: 4.979e-09.

Esto no implica que la prueba de niveles individuales produzca valores p idénticos. En el caso de OLS, podemos invocar summary(fit)y obtener:

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

Esto no es posible en ANOVA, que es más una prueba ómnibus. Para obtener estos tipos de evaluaciones de valor , necesitamos ejecutar una prueba de diferencia significativa honesta de Tukey, que intentará reducir la posibilidad de un error de tipo I como resultado de realizar múltiples comparaciones por pares (por lo tanto, " "), lo que resulta en un salida completamente diferente: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 última instancia, nada es más tranquilizador que echar un vistazo al motor debajo del capó, que no es otro que las matrices del modelo y las proyecciones en el espacio de la columna. En realidad, estos son bastante simples en el caso de un ANOVA:

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

Esta sería la matriz de modelo ANOVA de una vía con tres niveles (por ejemplo cyl 4, cyl 6, cyl 8), que se resumen como , donde es la media en cada nivel o grupo: cuando Si se agrega el error o residual para la observación del grupo o nivel , obtenemos la observación real DV .yij=μi+ϵijμijiyij

Por otro lado, la matriz modelo para una regresión OLS es:

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

Esta es de la forma con una sola intersección y dos pendientes ( y ) cada una para una variable continua diferente, digamos y .yi=β0+β1xi1+β2xi2+ϵiβ0β1β2weightdisplacement

El truco ahora es ver cómo podemos crear diferentes intersecciones, como en el ejemplo inicial, lm(mpg ~ wt + as.factor(cyl), data = mtcars)así que eliminemos la segunda pendiente y ceñámonos a la variable continua única original weight(en otras palabras, una sola columna además de la columna de unidades en la matriz modelo; la intersección y la pendiente para , ). La columna de 's corresponderá por defecto a la intersección. Una vez más, su valor no es idéntico a la media de ANOVA dentro del grupo , una observación que no debería sorprender comparando la columna de en la matriz del modelo OLS (a continuación) con la primera columna deβ0weightβ11cyl 4cyl 411's en la matriz modelo ANOVA que solo selecciona ejemplos con 4 cilindros. La intersección se desplazará a través de una codificación ficticia para explicar el efecto de y de la siguiente manera:(1),cyl 6cyl 8

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

Ahora, cuando la tercera columna es , sistemáticamente la intersección porEl indica que, como en el caso de la "línea de base", la intercepción en el modelo OLS no es idéntica a la media grupal de los automóviles de 4 cilindros, pero lo refleja, las diferencias entre los niveles en el modelo OLS no son matemáticamente Las diferencias entre grupos en las medias: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)

Del mismo modo, cuando la cuarta columna es , se agregará un valor fijo a la intersección. La ecuación matricial, por lo tanto, será . Por lo tanto, ir con este modelo al modelo ANOVA es solo una cuestión de deshacerse de las variables continuas y comprender que la intercepción predeterminada en OLS refleja el primer nivel en ANOVA.1μ~3yi=β0+β1xi+μ~i+ϵi


66
+1, me encanta tu ilustración gráfica !! calidad de publicación!
Haitao Du

@ hxd1011 Esto es muy amable de su parte. Lo aprecio.
Antoni Parellada

6

Antoni Parellada y ussr11852 tuvieron muy buena respuesta. Abordaré su pregunta para codificar la perspectiva con R.

ANOVA no le dice nada sobre los coeficientes del modelo lineal. Entonces, ¿cómo es la regresión lineal lo mismo que ANOVA?

De hecho, podemos aovfuncionar en Rse puede utilizar igual que lm. Aquí hay unos ejemplos.

> 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

Como puede ver, no solo podemos obtener el coeficiente del modelo ANOVA, sino que también podemos usarlo para la predicción, al igual que el modelo lineal.

Si revisamos el archivo de ayuda para la aovfunción, dice

Esto proporciona una envoltura a la película para ajustar modelos lineales a diseños experimentales balanceados o no balanceados. La principal diferencia con respecto a lm está en la forma en que la impresión, el resumen, etc. manejan el ajuste: esto se expresa en el lenguaje tradicional del análisis de varianza en lugar del de los modelos lineales.


1

Si tomamos todas las entradas de datos y las organizamos en una sola columna Y, con el resto de las columnas como variables indicadoras 1 {i-data es el elemento de la columna jth en el arreglo anova original} entonces tomando una regresión lineal simple de Y en en cualquiera de las otras columnas (por ejemplo, la columna B), debe obtener la misma estadística de prueba DF, SS, MS y F que en su problema ANOVA.

Por lo tanto, ANOVA se puede "tratar como" Regresión lineal escribiendo los datos con variables binarias. También tenga en cuenta que el coeficiente de regresión para, digamos, una regresión de Y en B debería ser el mismo que el promedio. de la columna B, calculada con los datos originales.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.