¿Cómo incluir un término de interacción en GAM?

24

El siguiente código evalúa la similitud entre dos series de tiempo:

set.seed(10)
RandData <- rnorm(8760*2)
America <- rep(c('NewYork','Miami'),each=8760)

Date = seq(from=as.POSIXct("1991-01-01 00:00"), 
           to=as.POSIXct("1991-12-31 23:00"), length=8760)

DatNew <- data.frame(Loc = America,
                     Doy = as.numeric(format(Date,format = "%j")),
                     Tod = as.numeric(format(Date,format = "%H")),
                     Temp = RandData,
                     DecTime = rep(seq(1, length(RandData)/2) / (length(RandData)/2),
                                   2))
require(mgcv)
mod1 <- gam(Temp ~ Loc + s(Doy) + s(Doy,by = Loc) +
  s(Tod) + s(Tod,by = Loc),data = DatNew, method = "ML")

Aquí, gamse utiliza para evaluar cómo la temperatura en Nueva York y Miami varía de la temperatura media (de ambos lugares) en diferentes momentos del día. El problema que tengo ahora es que necesito incluir un término de interacción que muestre cómo la temperatura de cada ubicación varía a lo largo del día para diferentes días del año. Eventualmente espero mostrar toda esta información en un gráfico (para cada ubicación). Entonces, para Miami, espero tener un gráfico que muestre cómo la temperatura varía de la media durante diferentes momentos del día y diferentes momentos del año (¿trama 3d?)

KatyB
fuente
2
Puede encontrar la respuesta a esta pregunta stats.stackexchange.com/questions/18937/… relevante.
jbowman

Respuestas:

18

La "a" en "gam" significa "aditivo", lo que significa que no hay interacciones, por lo que si se ajustan a las interacciones, realmente ya no se ajusta a un modelo de gam.

Dicho esto, hay formas de obtener cierta interacción como términos dentro de los términos aditivos en un juego, ya está utilizando uno de esos mediante el byargumento to s. Podría intentar extender esto para que el argumento bysea ​​una matriz con una función (sin, cos) de doy o tod. También podría ajustar las splines de suavizado en un modelo lineal regular que permita interacciones (esto no proporciona el backfitting que hace gam, pero aún podría ser útil).

También puede considerar la regresión de búsqueda de proyección como otra herramienta de ajuste. Loess o más modelos paramétricos (con sin y / o cos) también pueden ser útiles.

Parte de la decisión sobre qué herramienta (s) usar es qué pregunta está tratando de responder. ¿Estás tratando de encontrar un modelo para predecir fechas y horas futuras? ¿Está tratando de probar para ver si predictores particulares son significativos en el modelo? ¿Estás tratando de entender la forma de la relación entre un predictor y el resultado? ¿Algo más?

Greg Snow
fuente
3
Supongamos que tiene dos predictores : ¿no es todavía un juego? Esto podría considerarse como una 'interacción' en algún sentido. Además, creo que el paquete le permite ajustar modelos como (que creo que es lo que está haciendo el argumento). ¿Sigue siendo un juego? y = f 1 ( x 1 ) + f 2 ( x 2 ) + f 3 ( x 1 x 2 ) + ε y = f 1 ( x 1 ) + f 2 ( x 2 ) + f 3 ( x 1 ) x 2 + f 4 ( x 2X1,X2
y=F1(X1)+F2(X2)+F3(X1X2)+ε
gam
y=F1(X1)+F2(X2)+F3(X1)X2+F4 4(X2)X1+ε
by
Macro
1
@Macro, depende de si quieres dividir los pelos o no (bueno, técnicamente, lo que escribiste podría ser am porque realmente no estás usando la parte g).
Greg Snow
2
@Macro, estoy seguro de que se ha dicho más sobre el tema, pero vea la página 4 sobre GAMs de este artículo de Venable, Exegeses on Linear Models . No está claro exactamente cómo se identifican simultáneamente los efectos principales no aditivos y los efectos de interacción.
Andy W
Muchas gracias por tus comentarios. Mi objetivo principal aquí es no predecir valores futuros, sino simplemente ver cómo cada serie temporal se altera con respecto a la media de ambas series. Por ejemplo, el resultado de mod1 muestra cómo las series de tiempo en cada ubicación varían de la media, primero en la escala de tiempo del día del año (Doy) y luego la hora del día (Tod). A partir de esto, me gustaría ver cómo varía cada serie en función de Doy y Tod, y espero que las series temporales difieran mucho durante el período de verano.
KatyB
2
@AndyW Es importante tener en cuenta que los GAM han recorrido un largo camino desde que Venable estaba comentando sobre ellos, desarrollos en la última década más o menos con las estrías penalizadas sensu Simon Wood (implementado en mgcv ) y los tratamientos completamente bayesianos abordan problemas como selección de suavidad, interacciones y cómo ajustarlas (los productos tensoriales de bases marginales son un enfoque) en el marco del modelo aditivo. Estoy razonablemente seguro de que las objeciones de Venable y Cox a los GAM como se describe en las exégesis de los primeros han sido abordadas en gran medida por estos desarrollos recientes en la teoría GAM.
Restablece a Monica - G. Simpson el
25

Para dos variables continuas, puede hacer lo que quiera (ya sea que se trate de una interacción o no, dejaré que otros discutan según los comentarios a la respuesta de @ Greg) usando:

mod1 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1) +
                         te(Tod, Doy, by = Loc, bs = rep("cc",2)),
            data = DatNew, method = "ML")

El modelo más simple se debe anidar dentro del modelo más complejo anterior. Ese modelo más simple es:

mod0 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1),
            data = DatNew, method = "ML")

Tenga en cuenta dos cosas aquí:

  1. Se indica el tipo de base para cada suavizador. En este caso, esperaríamos que no haya discontinuidades en Temp entre las 23:59 y las 00:00 para Todni entre Doy == 1y Doy == 365.25. Por lo tanto, las splines cúbicas cíclicas son apropiadas, indicadas aquí a través de bs = "cc".
  2. La dimensión base se establece explícitamente ( k = 5). Esto coincide con la dimensión base predeterminada para cada suavizado en un te()término.

Juntas, estas características aseguran que el modelo más simple realmente esté anidado dentro del modelo más complejo.

Para más información ver ?gam.modelsen mgcv .

Restablece a Mónica - G. Simpson
fuente
Relacionado con su segundo punto: además de la especificación de k, ¿también se debe corregir el número de nudos (por ejemplo fx=TRUE)? Si no, el modelo resultante muestra variaciones edfpara cada término.
Marc en la caja el
Debería actualizar esta respuesta un poco, dada alguna nueva funcionalidad en el paquete mgcv en términos de splines para bases marginales. Dicho esto, no estoy de acuerdo con que necesites fijar los grados de libertad para la spline. La clave es garantizar que las bases de los modelos estén anidadas adecuadamente. Entonces, las diferencias entre modelos son posibles al establecer algunos de los coeficientes para las funciones básicas en cero, tal como sucedería en un modelo lineal con términos que no sean spline.
Restablece a Monica - G. Simpson el
3
Esperando que alguien siga viendo este hilo y pueda responder. En estos modelos, ¿por qué debe especificar ambos s(Doy...)y s(Doy, by =Loc...)? Pensé que el primero estaría anidado en el segundo y, por lo tanto, no sería necesario especificarlo.
ego_
3
No, el primer suave es la función global y el por suave representa las diferencias específicas del sitio entre él y el global suave. Sin m = 1embargo, los suavizadores de by realmente necesitan agregarse para poner la penalización en la primera derivada de los suavizados de diferencia.
Restablece a Monica - G. Simpson el
2
@JoshuaRosenberg Si quiere decir te(), ¿depende de lo que esté incluyendo en el producto tensor? Las interacciones descritas aquí son interacciones de factor suave, pero te()implicarían dos o más variables continuas. Si desea términos globales y desviaciones específicas del tema, entonces sí, te(DoY, Year, by = Loc, m = 1)podría usarse junto te(DoY, Year), aunque hay otras formas de lograr cosas similares usando una interacción suave de factor de efecto aleatorio y te()términos que contienen una spline de efecto aleatorio.
Restablece a Monica - G. Simpson el