Зазвичай:
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
obj <- plot(model, ....)
а потім перевірте obj
, що представляє собою список з одним компонентом на гладку. Додайте seWithMean = TRUE
до plot()
виклику, щоб отримати довірчі інтервали, які не обумовлені параметром гладкості.