W zwykły sposób:
p <- predict(mod, newdata, type = "link", se.fit = TRUE)
Następnie zauważ, że p
zawiera komponent $se.fit
ze standardowymi błędami prognoz dla obserwacji w newdata
. Następnie możesz utworzyć CI, mnożąc SE przez wartość odpowiednią do pożądanego poziomu. Np. Przybliżony 95% przedział ufności powstaje jako:
upr <- p$fit + (2 * p$se.fit)
lwr <- p$fit - (2 * p$se.fit)
Zastępujesz odpowiednią wartość z rozkładu lub Gaussa za potrzebny przedział.t
Pamiętaj, że używam, type = "link"
ponieważ nie mówisz, jeśli masz GAM lub tylko AM. W GAM musisz utworzyć przedział ufności na skali predyktora liniowego, a następnie przekształcić go na skalę odpowiedzi, stosując odwrotność funkcji link:
upr <- mod$family$linkinv(upr)
lwr <- mod$family$linkinv(lwr)
Teraz zauważ, że są to bardzo przybliżone interwały. Ponadto przedziały te są punktowo oparte na przewidywanych wartościach i nie uwzględniają faktu, że dokonano wyboru gładkości.
Równoczesny przedział ufności można obliczyć poprzez symulację na podstawie tylnego rozkładu parametrów. Mam taki przykład na swoim blogu .
Jeśli potrzebujesz przedziału ufności, który nie jest uzależniony od parametrów wygładzania (tj. Takiego, który bierze pod uwagę, że nie znamy, ale szacuje wartości parametrów wygładzania), następnie dodaj unconditional = TRUE
do predict()
wywołania.
Ponadto, jeśli nie chcesz tego robić sam, pamiętaj, że nowsze wersje mgcv mają plot.gam()
funkcję, która zwraca obiekt ze wszystkimi danymi użytymi do utworzenia wykresów wygładzeń i ich przedziałów ufności. Możesz po prostu zapisać dane wyjściowe plot.gam()
w obiekcie obj
obj <- plot(model, ....)
a następnie sprawdź obj
, która jest listą zawierającą jeden składnik na gładkie. Dodaj seWithMean = TRUE
do plot()
wywołania, aby uzyskać przedziały ufności, które nie są uzależnione od parametru gładkości.