Есть 3 способа, которыми я знаю, как это сделать, один из них описан в другом ответе. Вот еще несколько вариантов. Этот первый использует nls (), чтобы соответствовать модели, и investr :: predFit, чтобы делать прогнозы и CI:
library(tidyverse)
library(investr)
data <- tibble(date = 1:7,
cases = c(0, 0, 1, 4, 7, 8.5, 8.5))
model <- nls(cases ~ SSlogis(log(date), Asym, xmid, scal), data= data )
new.data <- data.frame(date=seq(1, 10, by = 0.1))
interval <- as_tibble(predFit(model, newdata = new.data, interval = "confidence", level= 0.9)) %>%
mutate(date = new.data$date)
p1 <- ggplot(data) + geom_point(aes(x=date, y=cases),size=2, colour="black") + xlab("Date") + ylab("Cases")
p1+
geom_line(data=interval, aes(x = date, y = fit ))+
geom_ribbon(data=interval, aes(x=date, ymin=lwr, ymax=upr), alpha=0.5, inherit.aes=F, fill="blue")+
theme_classic()
![enter image description here](https://i.stack.imgur.com/RcBJs.png)
Другой вариант - выполнить подгонку модели и прогнозирование с помощью 'dr c' pacakge (он же кривые доза-эффект). В этом пакете используются встроенные начальные функции, которые необходимо использовать (или создавать), но объект класса 'dr c' имеет много полезных методов, которые можно использовать - один из них - предикат.dr c, который поддерживает доверительные интервалы (хотя только для некоторых из встроенных самозапускателей). Пример с пакетом 'dr c':
library(drc)
model_drc <- drm(cases~date, data = data, fct=LL.4())
predict_drc <- as_tibble(predict(model_drc, newdata = new.data, interval = "confidence", level = 0.9)) %>%
mutate(date = new.data$date)
p1+
geom_line(data=predict_drc, aes(x = date, y = Prediction ))+
geom_ribbon(data=predict_drc, aes(x=date, ymin=Lower, ymax=Upper), alpha=0.5, inherit.aes=F, fill="red")+
ggtitle("with package 'drc'")+
theme_classic()
![enter image description here](https://i.stack.imgur.com/dN5lS.png)
Дополнительная информация о пакете 'dr c': журнал статья , статья в блоге , описывающая пользовательские автозапуски для dr c, и пакет docs