2016-07-24 21 views
1

Ich möchte jede Komponente des Prädiktors aus einem GAM-Modell separat mit der Option type="terms" bewerten. Als Plausibilitätsprüfung habe ich die Ergebnisse mit einer Auswertung der Gesamtvorhersage unter Verwendung der Option type="response" verglichen.mgcv: predict.gam() gibt unterschiedliche Ergebnisse für type = "terms" und type = "response"

Es stellt sich heraus, dass die Ergebnisse unterschiedlich sind. Hier ist ein Beispiel:

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 

Kann mir jemand bei diesem Problem helfen? Vielen Dank für Ihre Hilfe!

Antwort

1

Ihr Modell:

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

hat ein Offset-Term.

Offset wird von predict.gam wenn type = "link" oder type = "response" berücksichtigt, aber nicht berücksichtigt, wenn 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 

So müssen Sie selbst hinzufügen Offset:

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

Jetzt a1 und a2 gleich sind.


Falls Sie sich fragen, habe ich Dokumentation für Sie in ?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**.