На мою думку, описана вами модель насправді не піддається побудові графіків, оскільки сюжети найкраще функціонують, коли вони відображають складну інформацію, яку важко зрозуміти інакше (наприклад, складні взаємодії). Однак якщо ви хочете відобразити графік відносин у вашій моделі, у вас є два основні варіанти:
- Відобразіть ряд сюжетів двовимірних зв’язків між вашими прогнозами, що цікавлять вас, та вашим результатом, розкидаючи необмежену точку даних. Накресліть конверти помилок навколо ваших ліній.
- Відображайте графік з варіанту 1, але замість того, щоб показувати необроблені точки даних, покажіть точки даних з іншими вашими прогнозами, маргіналізованими (тобто після віднімання внесків інших прогнозів)
Перевага варіанту 1 полягає в тому, що він дозволяє глядачеві оцінювати розсіювання в необроблених даних. Перевага варіанту 2 полягає в тому, що він показує помилку на рівні спостереження, яка фактично призвела до стандартної помилки коефіцієнта фокусу, який ви відображаєте.
Я включив код R і графік кожного варіанту нижче, використовуючи дані з Prestige
набору даних у car
пакеті в Р.
## 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
## 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