Вы можете установить пользовательскую формулу в stat_smooth
. Следуя вашему примеру, если вы хотите подогнать полином 4-го порядка, вы можете использовать
ggplot(p, aes(x = eta, y = R)) +
geom_point(size = 3) +
stat_smooth(method = 'lm', formula = y~ poly(x, 4), se = FALSE)
Редактировать: добавление уравнения с асимптотой в 1,0. Это немного сложнее, так как требует решения с использованием нелинейного подхода. Три вещи, которые мне здесь помогли:
- Следуя формуле
nls
в этом примере - Использование
nls
в stat_smooth
, как они делают в этот ответ - Установите верхнюю границу равной 1,0 в соответствии с запросом ОП
ggplot(p, aes(x = eta, y = R)) +
geom_point(size = 3) +
stat_smooth(method = 'nls',
formula = y ~ C*(1-exp(-k*x)),
method.args = list(start=list(C=1,k=1),
upper = c(C = 1, k = 10),
algorithm = 'port'),
se = FALSE)
Хотя это удобно для построения графиков, stat_smooth
затрудняет доступ к формуле. Если вам это нужно, вы можете выйти за пределы графика, используя функцию nls
напрямую, а затем делать прогнозы, используя predict
.
# Fit model
fit_nls <-nls(R ~ C*(1-exp(-k*eta)),
data=p,
start=list(C=1,k=1),
upper = c(C = 1, k = 10),
algorithm = 'port')
# Predict model
df_pred <- data.frame(eta = seq(0,1.1,.01)) %>%
mutate(R_pred = predict(fit_nls, newdata = .))
# Plot it
ggplot(p) +
geom_point(aes(x = eta, y = R), size = 3) +
geom_line(data = df_pred, aes(x = eta, y = R_pred))