Meilleure façon de présenter visuellement des relations à partir d'un modèle linéaire multiple

15

J'ai un modèle linéaire avec environ 6 prédicteurs et je vais présenter les estimations, les valeurs F, les valeurs p, etc. Cependant, je me demandais quel serait le meilleur tracé visuel pour représenter l'effet individuel d'un seul prédicteur sur la variable de réponse? Scatterplot? Tracé conditionnel? Tracé d'effets? etc? Comment pourrais-je interpréter ce complot?

Je ferai cela dans R alors n'hésitez pas à fournir des exemples si vous le pouvez.

EDIT: Je m'intéresse principalement à la présentation de la relation entre un prédicteur donné et la variable de réponse.

AMathew
la source
Avez-vous des termes d'interaction? Le complot serait beaucoup plus difficile si vous en avez.
Hotaka
Non, seulement 6 variables continues
AMathew
Vous avez déjà six coefficients de régression, un pour chaque prédicteur, qui vont probablement être présentés sous forme de tableau, quelle est la raison de répéter à nouveau le même point avec le graphique?
Penguin_Knight
3
Pour les publics non techniques, je préfère leur montrer un graphique plutôt que de parler d'estimation ou de la façon dont les coefficients sont calculés.
AMathew
2
@tony, je vois. Ces deux sites Web peuvent peut-être vous inspirer: utiliser le package R visreg et le graphique à barres d'erreur pour visualiser les modèles de régression.
Penguin_Knight

Réponses:

12

À mon avis, le modèle que vous avez décrit ne se prête pas vraiment au tracé, car les tracés fonctionnent mieux lorsqu'ils affichent des informations complexes qui sont difficiles à comprendre autrement (par exemple, des interactions complexes). Cependant, si vous souhaitez afficher un tracé des relations dans votre modèle, vous avez deux options principales:

  1. Affichez une série de graphiques des relations bivariées entre chacun de vos prédicteurs d'intérêt et votre résultat, avec un nuage de points des points de données bruts. Tracez des enveloppes d'erreur autour de vos lignes.
  2. Affichez le tracé de l'option 1, mais au lieu d'afficher les points de données bruts, affichez les points de données avec vos autres prédicteurs marginalisés (c'est-à-dire après avoir soustrait les contributions des autres prédicteurs)

L'avantage de l'option 1 est qu'elle permet au spectateur d'évaluer la dispersion des données brutes. L'avantage de l'option 2 est qu'elle montre l'erreur au niveau de l'observation qui a en fait entraîné l'erreur standard du coefficient focal que vous affichez.

J'ai inclus le code R et un graphique de chaque option ci-dessous, en utilisant les données de l' Prestigeensemble de données dans le carpackage 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

Graphique utilisant des points de données bruts

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

Données ajustées

Patrick S. Forscher
la source