R / mgcv: Warum produzieren te () und ti () Tensorprodukte unterschiedliche Oberflächen?

11

Das mgcvPaket für Rhat zwei Funktionen zum Anpassen von Tensorproduktwechselwirkungen: te()und ti(). Ich verstehe die grundlegende Arbeitsteilung zwischen den beiden (Anpassen einer nichtlinearen Wechselwirkung vs. Zerlegen dieser Wechselwirkung in Haupteffekte und eine Wechselwirkung). Was ich nicht verstehe, ist warum te(x1, x2)und ti(x1) + ti(x2) + ti(x1, x2)kann (leicht) unterschiedliche Ergebnisse liefern.

MWE (angepasst von ?ti):

require(mgcv)
test1 <- function(x,z,sx=0.3,sz=0.4) { 
  x <- x*20
 (pi**sx*sz)*(1.2*exp(-(x-0.2)^2/sx^2-(z-0.3)^2/sz^2)+
             0.8*exp(-(x-0.7)^2/sx^2-(z-0.8)^2/sz^2))
}
n <- 500

x <- runif(n)/20;z <- runif(n);
xs <- seq(0,1,length=30)/20;zs <- seq(0,1,length=30)
pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30)))
truth <- matrix(test1(pr$x,pr$z),30,30)
f <- test1(x,z)
y <- f + rnorm(n)*0.2

par(mfrow = c(2,2))

# Model with te()
b2 <- gam(y~te(x,z))
vis.gam(b2, plot.type = "contour", color = "terrain", main = "tensor product")

# Model with ti(a) + ti(b) + ti(a,b)
b3 <- gam(y~ ti(x) + ti(z) + ti(x,z))
vis.gam(b3, plot.type = "contour", color = "terrain", main = "tensor anova")

# Scatterplot of prediction b2/b3
plot(predict(b2), predict(b3))

Die Unterschiede sind in diesem Beispiel nicht sehr groß, aber ich frage mich nur, warum es überhaupt Unterschiede geben sollte.

Sitzungsinfo:

 > devtools::session_info("mgcv")
 Session info
 -----------------------------------------------------------------------------------
 setting  value                       
 version  R version 3.3.1 (2016-06-21)
 system   x86_64, linux-gnu           
 ui       RStudio (0.99.491)          
 language en_US                       
 collate  en_US.UTF-8                 
 tz       <NA>                        
 date     2016-09-13                  

 Packages      ---------------------------------------------------------------------------------------
 package * version date       source        
 lattice   0.20-33 2015-07-14 CRAN (R 3.2.1)
 Matrix    1.2-6   2016-05-02 CRAN (R 3.3.0)
 mgcv    * 1.8-12  2016-03-03 CRAN (R 3.2.3)
 nlme    * 3.1-128 2016-05-10 CRAN (R 3.3.1)
jvh_ch
quelle
4
Ernsthaft Leute!? Während die Implementierung eindeutig mgcv-spezifisch ist (mir ist keine andere Standard-Software für GAMs bekannt, die diese ANOVA-ähnliche Zerlegung bivariater Glättungen ermöglicht), sind das Problem und die Antwort eindeutig statistisch. Die Modelle, die angepasst werden, sind unter der Haube aufgrund der zusätzlichen Strafmatrizen, die beim Zerlegen der Randbegriffe aus der Komponente "Interaktion" entstehen, nicht dieselben. Dies ist nicht spezifisch für mgcv.
Stellen Sie Monica wieder her - G. Simpson
1
@ GavinSimpson Ich habe eine Frage zu Meta über die Aktualität oder auf andere Weise dieser Frage gestellt
Silverfish

Antworten:

15

Dies ist oberflächlich das gleiche Modell, aber in der Praxis gibt es beim Anpassen einige subtile Unterschiede. Ein wichtiger Unterschied besteht darin, dass das Modell mit ti()Begriffen im Vergleich zum te()Modell mehr Glättungsparameter schätzt :

> b2$sp
te(x,z)1 te(x,z)2 
3.479997 5.884272 
> b3$sp
    ti(x)     ti(z)  ti(x,z)1  ti(x,z)2 
 8.168742 60.456559  2.370604  2.761823

und dies liegt daran, dass den beiden Modellen mehr Strafmatrizen zugeordnet sind; Im ti()Modell haben wir einen pro "Term" im Vergleich zu nur zwei im te()Modell, einen pro Randglättung.

Ich sehe Modelle mit ti()als verwendet, um zu entscheiden, ob ich oder möchte . Ich kann diese Modelle nicht vergleichen, wenn ich Begriffe verwende . Sobald ich festgestellt habe, ob ich benötige kann ich das Modell mit anpassen, wenn ich es benötige, oder mit separat für jeden Randeffekt, wenn ich nicht benötige .y^=β0+s(x,y)y^=β0+s(x)+s(y)te()ti()s(x,y)te()s()s(x,y)

Beachten Sie, dass Sie die Modelle durch Anpassen mit method = "ML"(oder "REML", aber nicht mit "festen" Effekten vergleichen können, es "REML"sei denn, alle Begriffe sind vollständig bestraft, was standardmäßig nicht der Fall ist, aber sagen würde mit select = TRUE).

Stellen Sie Monica wieder her - G. Simpson
quelle