Я собираюсь опубликовать возможное решение с использованием графики R без особых пояснений.Основная идея состоит в том, чтобы использовать predict
, чтобы сгенерировать прогнозируемые значения в масштабе ответа (оригинала) и затем построить их.Все остальное в основном косметика.Лично я бы использовал отличный пакет visreg
, который с легкостью генерирует эти виды графики.Соответствующий код, используя visreg, размещен внизу этого ответа.
mod <- glm(data=dat, events ~ treatment * size, family = quasipoisson)
plot(
events~size
, xlim = range(dat$size)
, ylim = range(dat$events)
, pch = 1
, col = "#008FD0"
, las = 1
, data = subset(dat, treatment %in% "control")
)
points(
events~size
, pch = 1
, col = "#F07E00"
, data = subset(dat, treatment %in% "treatment")
)
legend(
"topleft"
, legend = c("treatment", "control")
, pch = c(1, 1)
, lwd = c(2, 2)
, col = c("#F07E00", "#008FD0")
, bty = "n"
)
xx <- seq(min(dat$size), max(dat$size), length.out = 1000)
pred_frame <- expand.grid(
size = xx
, treatment = c("control", "treatment")
)
pred_frame$preds <- predict(mod, newdata = pred_frame, type = "response")
lines(
preds~size
, col = "#F07E00"
, lwd = 2
, data = subset(pred_frame, treatment %in% "treatment")
)
lines(
preds~size
, col = "#008FD0"
, lwd = 2
, data = subset(pred_frame, treatment %in% "control")
)
Использование visreg
:
visreg(
mod
, "size"
, by = "treatment"
, overlay = TRUE
, scale = "response"
, band = FALSE
, ylim = range(dat$events)
)