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