Se trata de una confusión frecuente derivada de la forma en que suelen mostrarse las estimaciones de coeficientes y los valores p para los predictores categóricos multinivel. Con esta codificación de tratamiento por defecto, el intercepto es el resultado en el nivel de referencia y los coeficientes son el diferencias de ese resultado asociado a los otros niveles.
La elección del nivel de referencia importa en términos de visualización, pero no para el modelo fundamental. Si cambia el nivel de referencia, tanto el intercepto como las estimaciones de los demás coeficientes cambiarán .
En este caso concreto, puede obtener una visualización más clara si omite la intercepción. (Fijé la semilla en 2552 antes de continuar con su código para generar df, y mantuve el nivel de referencia en "1").
lm2 <- lm(y ~ -1 + cat, df)
En lugar de centrarse en los coeficientes individuales y los valores p, examine la importancia global del predictor categórico. Con estos datos, la norma anova()
es una buena elección (sobre todo porque se trata de un ANOVA equilibrado en lm
forma). El predictor es altamente significativo, como se pretendía.
anova(lm2)
# Analysis of Variance Table
#
# Response: y
# Df Sum Sq Mean Sq F value Pr(>F)
# cat 3 269.47 89.824 86.183 < 2.2e-16
# Residuals 747 778.56 1.042
Una vez omitido el intercepto, cada uno de los niveles se muestra con su propio valor medio y la significación de su diferencia respecto a 0.
summary(lm2)
## some output lines omitted
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# cat1 1.03630 0.06457 16.050 <2e-16
# cat2 -0.05519 0.06457 -0.855 0.393
# cat3 0.03040 0.06457 0.471 0.638
Sin embargo, este truco sólo funciona con un único predictor categórico.
En general, con la codificación del tratamiento, el intercepto representa una situación en la que todos los predictores categóricos están en sus niveles de referencia y los predictores continuos están en 0. Por tanto, la "significación" del intercepto es simplemente si el resultado es significativamente diferente de 0 para esa elección concreta de niveles de referencia y centrado de predictores continuos . En muchas circunstancias, esa "importancia" no es muy útil por sí sola.
Del mismo modo, la "significación" de un coeficiente para un nivel no de referencia es si su diferencia del resultado en el nivel de referencia puede distinguirse de 0. Así que eso también depende de la elección del nivel de referencia.
No obstante, las predicciones de resultados para cualquier nivel de un predictor categórico serán las mismas independientemente del nivel de referencia o de las opciones de centrado del predictor. A menudo es aconsejable ignorar los valores p de los coeficientes en esta situación y fijarse directamente en las predicciones o en las diferencias entre predicciones.
Les emmeans
paquete proporciona una forma general de mostrar resúmenes de modelos más útiles de ese tipo. Funciona con el modelo original para mostrar estimaciones particulares o comparaciones de interés.
library(emmeans)
emmeans(lm2,pairwise~cat)
# $emmeans
# cat emmean SE df lower.CL upper.CL
# 1 1.0363 0.0646 747 0.9095 1.1631
# 2 -0.0552 0.0646 747 -0.1819 0.0716
# 3 0.0304 0.0646 747 -0.0964 0.1572
#
# Confidence level used: 0.95
#
# $contrasts
# contrast estimate SE df t.ratio p.value
# 1 - 2 1.0915 0.0913 747 11.953 <.0001
# 1 - 3 1.0059 0.0913 747 11.016 <.0001
# 2 - 3 -0.0856 0.0913 747 -0.937 0.6168
#
# P value adjustment: tukey method for comparing a family of 3 estimates
#
Les $emmeans
son las estimaciones de los resultados para cada nivel, el $contrasts
son las estimaciones de las diferencias entre cada par de niveles de predictor, con una corrección del valor p para comparaciones múltiples. Obtendría los mismos resultados si utilizara modelos de los mismos datos incluyendo el intercepto, o con cualquier otra elección de nivel de referencia.