Ответ 1
Это очень интересный вопрос. Вероятно, главная причина, по которой geom_smooth
настолько "устойчива", что позволяет настраивать модели нескольких переменных, заключается в том, что она ограничена производством двумерных кривых; следовательно, его аргументы предназначены для обработки двумерных данных (т.е. формула = переменная переменной = независимая переменная).
Трюк для получения того, что вы запросили, использует аргумент mapping
в geom_smooth
вместо formula
. Как вы, наверное, видели, глядя на документацию, formula
только позволяет указать математическую структуру модели (например, линейную, квадратичную и т.д.). И наоборот, аргумент mapping
позволяет вам напрямую указывать новые y-значения, такие как вывод пользовательской линейной модели, которую вы можете вызвать с помощью функции predict()
.
Обратите внимание, что по умолчанию для inherit.aes
установлено значение TRUE
, поэтому ваши построенные регрессии будут соответствующим образом окрашены вашей категориальной переменной. Здесь код:
# original plot
plot1 <- ggplot(df, aes(x=pred, y=outcome, color=factor)) +
geom_point(aes(color=factor)) +
geom_smooth(method = "lm") +
ggtitle("outcome ~ pred") +
theme_bw()
# declare new model here
plm <- lm(formula = outcome ~ pred + factor, data=df)
# plot with lm for outcome ~ pred + factor
plot2 <-ggplot(df, aes(x=pred, y=outcome, color=factor)) +
geom_point(aes(color=factor)) +
geom_smooth(method = "lm", mapping=aes(y=predict(plm,df))) +
ggtitle("outcome ~ pred + factor") +
theme_bw()