Обычным способом:
p <- predict(mod, newdata, type = "link", se.fit = TRUE)
Затем обратите внимание, что p
содержит компонент $se.fit
со стандартными ошибками прогнозов для наблюдений в newdata
. Затем вы можете сформировать CI, умножив SE на значение, соответствующее вашему желаемому уровню. Например, приблизительный 95% доверительный интервал формируется как:
upr <- p$fit + (2 * p$se.fit)
lwr <- p$fit - (2 * p$se.fit)
T
Обратите внимание, что я использую, type = "link"
как вы не говорите, если у вас есть GAM или просто AM. В GAM вам необходимо сформировать доверительный интервал на шкале линейного предиктора, а затем преобразовать его в шкалу ответа, применив обратную функцию связи:
upr <- mod$family$linkinv(upr)
lwr <- mod$family$linkinv(lwr)
Теперь обратите внимание, что это очень приблизительные интервалы. Кроме того, эти интервалы точечно соответствуют прогнозируемым значениям и не учитывают тот факт, что выбор плавности был выполнен.
Одновременный доверительный интервал может быть вычислен путем моделирования из апостериорного распределения параметров. У меня есть пример этого в моем блоге .
Если вам нужен доверительный интервал, который не зависит от параметров сглаживания (т. Е. Тот, который учитывает то, что мы не знаем, а вместо этого оцениваем значения параметров сглаживания), то добавьте unconditional = TRUE
к predict()
вызову.
Также, если вы не хотите делать это самостоятельно, обратите внимание, что в более новых версиях mgcv есть plot.gam()
функция, которая возвращает объект со всеми данными, используемыми для создания графиков сглаживания и их доверительных интервалов. Вы можете просто сохранить вывод из plot.gam()
объекта
obj <- plot(model, ....)
и затем проверьте obj
, который является списком с одним компонентом на сглаживание. Добавьте seWithMean = TRUE
к plot()
вызову, чтобы получить доверительные интервалы, которые не зависят от параметра гладкости.