32 votos

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

El código siguiente se 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í, gam se utiliza para evaluar la evolución de la temperatura en Nueva York y Miami variar de la temperatura media (de ambos lugares) en los diferentes momentos del día. El problema que ahora tengo es que necesito incluir un término de interacción que muestra cómo la temperatura de cada ubicación varía a lo largo del día en diferentes días del año. Finalmente me espero para mostrar toda esta información en una gráfica (para cada ubicación). Así, por Miami espero tener un gráfico que muestra cómo la temperatura varía de la media durante los diferentes momentos del día y en las diferentes épocas del año (gráfico 3d?)

37voto

David J. Sokol Puntos 1730

Para dos variables continuas, entonces usted puede hacer lo que quiera (si se trata de una interacción o no voy a dejar a los demás para discutir como por los comentarios de @Greg Respuesta) mediante:

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

El modelo más sencillo entonces debe estar anidada dentro de la más compleja del modelo anterior. Que modelo más simple es:

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

Nota dos cosas aquí:

  1. La base-tipo para cada una más suave, declaró. En este caso, sería de esperar que no existen discontinuidades en Temp entre las 23:59 y las 00:00 para Tod ni entre Doy == 1 y Doy == 365.25. Por lo tanto cíclico splines cúbicos son apropiados, los que se indican aquí a través de bs = "cc".
  2. La base de la dimensión que se indique explícitamente (k = 5). Esto coincide con el valor predeterminado de la base de la dimensión de cada uno liso en un te() plazo.

Juntos, estos aseguran que el modelo más sencillo de los que realmente está anidada dentro de los modelos más complejos.

Para más información, véase ?gam.models en mgcv.

29voto

Eero Puntos 1612

La "a" en "gam" es sinónimo de "aditivo" que significa que no hay interacciones, por lo que si se ajustan a las interacciones que no son realmente el ajuste de un modelo gam.

Dicho esto, hay maneras de obtener algún tipo de interacción como los términos dentro de los aditivos términos en un gam, que ya están utilizando uno de estos mediante el uso de la by argumento a s. Usted podría tratar de ampliar este concepto para tener el argumento by ser una matriz con una función (sin, cos) de dda o tod. Usted también podría encajar splines de suavizado en un modelo lineal que permite interacciones (esto no quiere dar a los reajustes que gam hace, pero aún podría ser útil).

También puede buscar en la proyección de búsqueda de regresión como otra herramienta de montaje. Loess o más modelos paramétricos (con el pecado y/o cos) también puede ser útil.

Parte de la decisión sobre qué herramienta(s) a utilizar es la pregunta que está tratando de responder. Simplemente estás tratando de encontrar un modelo para predecir el futuro de las fechas y los tiempos? está tratando de poner a prueba para ver si son predictores significativos en el modelo? estás tratando de entender la forma de la relación entre un indicador y el resultado? Algo más?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X