mgcv: predict.gam() дает разные результаты для type = terms и type = response

Я хочу оценить каждый компонент предиктора из модели GAM отдельно, используя опцию type="terms". В качестве проверки работоспособности я сравнил результаты с оценкой общего прогноза с использованием опции type="response".

Оказывается, результаты разные. Вот пример:

library(mgcv)
n<-200
sig <- 2
dat <- gamSim(1,n=n,scale=sig)
b<-gam(y~x0+s(I(x1^2))+s(x2)+offset(x3),da=dat)

nd <- data.frame(x0=c(.25,.5),x1=c(.25,.5),x2=c(.25,.5),x3=c(.25,.5))

a1 <- predict.gam(b,newdata=nd,type="response") 
a2 <- rowSums(predict.gam(b,newdata=nd,type="terms")) + b$coefficients[1]
a1 - a2 # Should be zero!
#    1    2 
# 0.25 0.50 

Может ли кто-нибудь помочь мне с этой проблемой? Большое спасибо за Вашу помощь!


person Wolf B    schedule 24.07.2016    source источник


Ответы (1)


Ваша модель:

y ~ x0 + s(I(x1^2)) + s(x2) + offset(x3)

имеет зачетный срок.

Смещение будет учитываться predict.gam при type = "link" или type = "response", но не учитываться при type = "terms".

a1 <- predict.gam(b, newdata=nd, type="response")
#        1         2 
#11.178280  6.865068 

a2 <- predict.gam(b, newdata=nd, type="terms")
#           x0 s(I(x1^2))      s(x2)
#1 0.006878346 -1.8710120  5.6467813
#2 0.013756691 -0.6037635 -0.1905571
#attr(,"constant")
#(Intercept) 
#   7.145632 

Таким образом, вы должны добавить смещение самостоятельно:

a2 <- rowSums(a2) + b$coef[1] + nd$x3
#        1         2 
#11.178280  6.865068 

Теперь a1 и a2 одинаковы.


Если вам интересно, у меня есть документация для вас в ?predict.gam:

type: ... When ‘type="terms"’ each component of the linear
      predictor is returned seperately (possibly with standard
      errors): this includes parametric model components, followed
      by each smooth component, **but excludes any offset and any
      intercept**.
person Zheyuan Li    schedule 24.07.2016