Permítanme poner un poco de color en la idea de que OLS con categórica ( codificación ficticia ) es equivalente al factores en el ANOVA. En ambos casos hay niveles (o grupos en el caso del ANOVA).
En la regresión OLS lo más habitual es tener también variables continuas en los regresores. Estas modifican lógicamente la relación en el modelo de ajuste entre las variables categóricas y la variable dependiente (D.C.). Pero no hasta el punto de hacer irreconocible el paralelo.
Basado en el mtcars
conjunto de datos podemos visualizar primero el modelo lm(mpg ~ wt + as.factor(cyl), data = mtcars)
como la pendiente determinada por la variable continua wt
(peso), y los diferentes interceptos que proyectan el efecto de la variable categórica cylinder
(cuatro, seis u ocho cilindros). Es esta última parte la que forma un paralelismo con un ANOVA unidireccional.
Veámoslo gráficamente en el subgrupo de la derecha (los tres subgrupos de la izquierda se incluyen para compararlos con el modelo ANOVA que se comenta inmediatamente después):
![enter image description here]()
Cada motor de cilindro está codificado por colores, y la distancia entre las líneas ajustadas con diferentes interceptos y la nube de datos es el equivalente a la variación dentro del grupo en un ANOVA. Obsérvese que los interceptos en el modelo OLS con una variable continua ( weight
) no es matemáticamente el mismo que el valor de las diferentes medias dentro del grupo en el ANOVA, debido al efecto de weight
y las diferentes matrices del modelo (véase más adelante): la media mpg
para los coches de 4 cilindros, por ejemplo, es mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364
mientras que el intercepto de la "línea de base" de OLS (que refleja por convención cyl==4
(ordenación de números de menor a mayor en R)) es notablemente diferente: summary(fit)$coef[1] #[1] 33.99079
. La pendiente de las líneas es el coeficiente de la variable continua weight
.
Si se intenta suprimir el efecto de weight
enderezando mentalmente estas líneas y devolviéndolas a la línea horizontal, obtendrá el gráfico ANOVA del modelo aov(mtcars$mpg ~ as.factor(mtcars$cyl))
en las tres subtramas de la izquierda. El weight
El regresor está ahora fuera, pero la relación entre los puntos y los diferentes interceptos se mantiene a grandes rasgos - simplemente estamos girando en sentido contrario a las agujas del reloj y extendiendo los gráficos previamente superpuestos para cada nivel diferente (de nuevo, sólo como un dispositivo visual para "ver" la conexión; no como una igualdad matemática, ¡ya que estamos comparando dos modelos diferentes!)
Cada nivel del factor cylinder
está separado, y las líneas verticales representan los residuos o el error dentro del grupo: la distancia de cada punto de la nube y la media de cada nivel (línea horizontal codificada por colores). El gradiente de color nos da una indicación de la importancia de los niveles para validar el modelo: cuanto más agrupados estén los puntos de datos en torno a sus medias de grupo, más probable será que el modelo ANOVA sea estadísticamente significativo. La línea negra horizontal alrededor de $\small 20$ en todos los gráficos es la media de todos los factores. Los números en el $x$ -Los ejes son simplemente el número/identificador del marcador de posición para cada punto dentro de cada nivel, y no tienen más propósito que separar los puntos a lo largo de la línea horizontal para permitir una visualización de trazado diferente a los boxplots.
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.2626
y TSS - SumSq = 824.7846
. Compara 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 sólo el categórico cylinder
como 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, pues, es que los residuos -la parte de la varianza total no explicada por el modelo- así como la varianza son los mismos tanto si se llama a un MCO del tipo lm(DV ~ factors)
o un ANOVA ( aov(DV ~ factors)
): cuando despojamos al modelo de las variables continuas terminamos con un sistema idéntico. Del mismo modo, cuando evaluamos los modelos globalmente o como un ANOVA ómnibus (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 las pruebas de los niveles individuales vayan a producir valores p idénticos. En el caso de OLS, podemos invocar summary(fit)
y conseguir:
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 el ANOVA, que es más bien una prueba ómnibus. Para obtener este tipo de $p$ -necesitamos ejecutar una prueba de diferencia significativa honesta de Tukey, que tratará de reducir la posibilidad de un error de tipo I como resultado de la realización de múltiples comparaciones por pares (de ahí, " p adjusted
"), dando como resultado una salida completamente diferente:
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 que hay bajo el capó, que no es otro que las matrices del modelo, y las proyecciones en el espacio de las columnas. En realidad, éstas son bastante sencillas en el caso de un ANOVA:
$$\small\begin{bmatrix} y_1 \\ y_2 \\ y_3 \\ \vdots \\\vdots\\\vdots\\.\\y_n \end{bmatrix} = \begin{bmatrix} \color{magenta} 1 & 0 & 0 \\ \color{magenta}1 & 0 & 0 \\ \vdots & \vdots & \vdots \\ \color{magenta} 0 & 1 & 0 \\ \color{magenta}0 & 1 & 0 \\ \vdots & \vdots & \vdots \\ .&.&.\\\color{magenta} 0 & 0 & 1 \\ \color{magenta}0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} \mu_1\\ \mu_2\\ \mu_3 \end{bmatrix} +\begin{bmatrix} \varepsilon_1 \\ \varepsilon_2\\ \varepsilon_3\\ \vdots\\ \vdots\\ \vdots\\ .\\ \varepsilon_n \end{bmatrix}\tag 1$$
Esta sería la matriz del modelo ANOVA de una vía con tres niveles (por ejemplo cyl 4
, cyl 6
, cyl 8
), que se resume en $\small y_{ij} = \mu_i + \epsilon_{ij}$ , donde $\mu_i$ es la media de cada nivel o grupo: cuando el error o residuo de la observación $j$ del grupo o nivel $i$ se añade, obtenemos la VD real $y_{ij}$ observación.
Por otro lado, la matriz del modelo para una regresión OLS es:
$$\small\begin{bmatrix}y_1 \\ y_2 \\ y_3 \\ y_4 \\ \vdots \\ y_n \end{bmatrix} = \begin{bmatrix} 1 & x_{12} & x_{13}\\ 1 & x_{22} & x_{23} \\ 1 & x_{32} & x_{33} \\ 1 & x_{42} & x_{43} \\ \vdots & \vdots & \vdots \\1 & x_{n2} & x_{n3} \end{bmatrix} \begin{bmatrix} \beta_0 \\ \beta_1 \\ \beta_2 \end{bmatrix} + \begin{bmatrix} \varepsilon_1 \\ \varepsilon_2 \\ \varepsilon_3 \\ \varepsilon_4 \\ \vdots \\ \varepsilon_n \end{bmatrix}$$
Es de la forma $ \small y_i = \beta_0 + \beta_1\, x_{i1} + \beta_2\, x_{i2} + \epsilon_i $ con una sola intercepción $\beta_0$ y dos pendientes ( $\beta_1$ y $\beta_2$ ) cada uno para una variable continua diferente, digamos weight
y displacement
.
El truco ahora es ver cómo podemos crear diferentes intercepciones, como en el ejemplo inicial, lm(mpg ~ wt + as.factor(cyl), data = mtcars)
- así que eliminemos la segunda pendiente y quedémonos con la única variable continua original weight
(en otras palabras, una sola columna además de la columna de unos en la matriz del modelo; el intercepto $\beta_0$ y la pendiente para weight
, $\beta_1$ ). La columna de $\color{brown}1$ se corresponderá por defecto con el cyl 4
interceptar. Una vez más, su valor no es idéntico a la media del grupo ANOVA para cyl 4
una observación que no debería sorprender comparando la columna de $\color{brown}1$ en la matriz del modelo OLS (abajo) a la primera columna de $\color{magenta}1$ en la matriz del modelo ANOVA $(1),$ que sólo selecciona ejemplos con 4 cilindros. El intercepto se desplazará mediante una codificación ficticia para explicar el efecto de cyl 6
y cyl 8
de la siguiente manera:
$$\small\begin{bmatrix}y_1 \\ y_2 \\ y_3 \\ y_4\\ y_5 \\ \vdots \\ y_n\end{bmatrix} = \begin{bmatrix} \color{brown}1 & x_1 \\ \color{brown}1 & x_2 \\\color{brown} 1 & x_3 \\ \color{brown}1 & x_4 \\ \color{brown}1 & x_5 \\ \vdots & \vdots \\\color{brown}1 & x_n \end{bmatrix} \begin{bmatrix} \beta_0 \\ \beta_1 \end{bmatrix}+ \begin{bmatrix}\color{red}1&0\\\color{red}1&0\\\color{red}1&0\\0&\color{blue}1\\0&\color{blue}1\\ \vdots & \vdots\\0&\color{blue}1\end{bmatrix} \begin{bmatrix} \tilde\mu_2 \\ \tilde\mu_3 \end{bmatrix} + \begin{bmatrix} \varepsilon_1 \\ \varepsilon_2 \\ \varepsilon_3 \\ \varepsilon_4 \\ \varepsilon_5\\ \vdots \\ \varepsilon_n \end{bmatrix}$$
Ahora, cuando la tercera columna es $\color{red}1$ vamos a desplazar sistemáticamente el intercepto por $\tilde\mu_2.$ El $\tilde\cdot$ indica que, como en el caso de que el intercepto de la "línea de base" en el modelo OLS no sea idéntico a la media del grupo de coches de 4 cilindros, sino que la refleje, las diferencias entre niveles en el modelo OLS no son matemáticamente las diferencias de medias entre grupos:
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)
Asimismo, cuando la cuarta columna es $\color{blue}1$ un valor fijo $\tilde\mu_3$ se añadirá a la interceptación. La ecuación matricial, por tanto, será $\small y_i = \beta_0 + \beta_1\, x_i + \tilde\mu_i + \epsilon_i $ . Por lo tanto, pasar con este modelo al modelo ANOVA es sólo cuestión de deshacerse de las variables continuas, y entender que el intercepto por defecto en OLS refleja el primer nivel en ANOVA.
0 votos
Ver también stats.stackexchange.com/questions/268006/