La mejor manera de presentar visualmente las relaciones de un modelo lineal múltiple

15

Tengo un modelo lineal con aproximadamente 6 predictores y voy a presentar las estimaciones, los valores de F, los valores de p, etc. Sin embargo, me preguntaba cuál sería el mejor gráfico visual para representar el efecto individual de un solo predictor en la variable de respuesta? ¿Gráfico de dispersión? Parcela condicional? Trama de efectos? etc? ¿Cómo interpretaría esa trama?

Haré esto en R, así que siéntete libre de proporcionar ejemplos si puedes.

EDITAR: Me preocupa principalmente presentar la relación entre cualquier predictor dado y la variable de respuesta.

AMathew
fuente
¿Tienes términos de interacción? Trazar sería mucho más difícil si los tienes.
Hotaka
No, solo 6 variables continuas
AMathew
Ya tiene seis coeficientes de regresión, uno para cada predictor, que probablemente se presentarán en forma de tabla, ¿cuál es la razón de repetir el mismo punto nuevamente con el gráfico?
Penguin_Knight
3
Para audiencias no técnicas, prefiero mostrarles una trama que hablar sobre la estimación o cómo se calculan los coeficientes.
AMathew
2
@tony, ya veo. Quizás estos dos sitios web puedan darle algo de inspiración: usar el paquete R visreg y el diagrama de barras de error para visualizar modelos de regresión.
Penguin_Knight

Respuestas:

12

En mi opinión, el modelo que ha descrito realmente no se presta para trazar, ya que las tramas funcionan mejor cuando muestran información compleja que de otra manera es difícil de entender (por ejemplo, interacciones complejas). Sin embargo, si desea mostrar una gráfica de las relaciones en su modelo, tiene dos opciones principales:

  1. Muestre una serie de gráficos de las relaciones bivariadas entre cada uno de sus predictores de interés y su resultado, con un diagrama de dispersión de los puntos de datos sin procesar. Trazar sobres de error alrededor de sus líneas.
  2. Muestre el gráfico de la opción 1, pero en lugar de mostrar los puntos de datos sin procesar, muestre los puntos de datos con sus otros predictores marginados (es decir, después de restar las contribuciones de los otros predictores)

El beneficio de la opción 1 es que permite al espectador evaluar la dispersión en los datos sin procesar. El beneficio de la opción 2 es que muestra el error en el nivel de observación que en realidad resultó en el error estándar del coeficiente focal que está mostrando.

He incluido el código R y un gráfico de cada opción a continuación, usando datos del Prestigeconjunto de datos en el carpaquete en R.

## Raw data ##

mod <- lm(income ~ education + women, data = Prestige)
summary(mod)

# Create a scatterplot of education against income
plot(Prestige$education, Prestige$income, xlab = "Years of education", 
     ylab = "Occupational income", bty = "n", pch = 16, col = "grey")
# Create a dataframe representing the values on the predictors for which we 
# want predictions
pX <- expand.grid(education = seq(min(Prestige$education), max(Prestige$education), by = .1), 
                  women = mean(Prestige$women))
# Get predicted values
pY <- predict(mod, pX, se.fit = T)

lines(pX$education, pY$fit, lwd = 2) # Prediction line
lines(pX$education, pY$fit - pY$se.fit) # -1 SE
lines(pX$education, pY$fit + pY$se.fit) # +1 SE

Graficar utilizando puntos de datos sin procesar

## Adjusted (marginalized) data ##

mod <- lm(income ~ education + women, data = Prestige)
summary(mod)

# Calculate the values of income, marginalizing out the effect of percentage women
margin_income <- coef(mod)["(Intercept)"] + coef(mod)["education"] * Prestige$education + 
    coef(mod)["women"] * mean(Prestige$women) + residuals(mod)

# Create a scatterplot of education against income
plot(Prestige$education, margin_income, xlab = "Years of education", 
     ylab = "Adjusted income", bty = "n", pch = 16, col = "grey")
# Create a dataframe representing the values on the predictors for which we 
# want predictions
pX <- expand.grid(education = seq(min(Prestige$education), max(Prestige$education), by = .1), 
              women = mean(Prestige$women))
# Get predicted values
pY <- predict(mod, pX, se.fit = T)

lines(pX$education, pY$fit, lwd = 2) # Prediction line
lines(pX$education, pY$fit - pY$se.fit) # -1 SE
lines(pX$education, pY$fit + pY$se.fit) # +1 SE

Datos ajustados

Patrick S. Forscher
fuente