Включая ответ @ JamesCurran, я считаю, что этот подход может сработать для вас.
Сначала вы используете map2
из purrr
, чтобы применить функцию прогнозирования к обеим моделям и извлечь подгонку и стандартную ошибку. Затем используйте mutate для сложения и вычитания в 1,96 раза стандартной ошибки и преобразования. Если вы не знакомы с purrr
, полезно знать, что оператор ~
заменяет function(x,y){}
и делает доступными специальные объекты .x
и .y
.
Тогда мы можем использовать ggplot
для построения линий и доверительных интервалов.
library(tidyverse)
library(ggplot2)
hotglm <- glm(hotspot~age+I(age^2),data = data, family = "binomial")
coldglm <- glm(coldspot~age+I(age^2),data = data, family = "binomial")
plotdata <- map2(list(coldfit = coldglm,coldse = coldglm,hotfit = hotglm, hotse = hotglm),
rep(c("fit","se.fit"),times=2),
~ predict(.x,data.frame(age=1:200),se.fit = TRUE)[[.y]]) %>%
data.frame %>%
mutate(age = 1:200,
coldline = exp(coldfit)/(1+exp(coldfit)),
coldlower = exp(coldfit - (coldse * 1.96))/(1+exp(coldfit - (coldse * 1.96))),
coldupper = exp(coldfit + (1.96 * coldse))/(1+exp(coldfit + (1.96 * coldse))),
hotline = exp(hotfit)/(1+exp(hotfit)),
hotlower = exp(hotfit - (1.96 * hotse))/(1+exp(hotfit - (1.96 * hotse))),
hotupper = exp(hotfit + (1.96 * hotse))/(1+exp(hotfit + (1.96 * hotse))))
ggplot(plotdata,aes(x=age,y=coldline)) +
geom_line(color = "blue") +
geom_line(aes(y=hotline),color="red")
ggplot(plotdata,aes(x=age,y=coldline)) +
geom_line(color = "blue") +
geom_ribbon(aes(ymin=coldlower, ymax=coldupper), alpha = 0.2,fill = "blue") +
geom_line(aes(y=hotline),color="red") + geom_ribbon(aes(ymin=hotlower, ymax=hotupper), alpha = 0.2,fill = "red")