Comment inclure un terme d'interaction dans GAM?

24

Le code suivant évalue la similitude entre deux séries chronologiques:

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")

Ici, gamest utilisé pour évaluer comment la température à New York et à Miami varie de la température moyenne (des deux endroits) à différents moments de la journée. Le problème que j'ai maintenant, c'est que je dois inclure un terme d'interaction qui montre comment la température de chaque emplacement varie tout au long de la journée pour différents jours de l'année. J'espère finalement afficher toutes ces informations sur un graphique (pour chaque emplacement). Donc, pour Miami, j'espère avoir un graphique qui montre comment la température varie de la moyenne à différents moments de la journée et à différentes périodes de l'année (tracé 3D?)

KatyB
la source
2
Vous trouverez peut-être la réponse à cette question stats.stackexchange.com/questions/18937/… pertinente.
jbowman

Réponses:

18

Le "a" dans "gam" signifie "additif" ce qui signifie aucune interaction, donc si vous ajustez les interactions, vous ne correspondez plus vraiment à un modèle de gam.

Cela dit, il existe des moyens d'obtenir des interactions comme des termes dans les termes additifs d'un jeu, vous en utilisez déjà un en utilisant l' byargument to s. Vous pouvez essayer d'étendre cela pour que l'argument bysoit une matrice avec une fonction (sin, cos) de doy ou tod. Vous pouvez également simplement ajuster les splines de lissage dans un modèle linéaire régulier qui permet des interactions (cela ne donne pas le backfitting que gam fait, mais pourrait toujours être utile).

Vous pouvez également considérer la régression de poursuite de projection comme un autre outil d'ajustement. Des modèles Loess ou plus paramétriques (avec sin et / ou cos) peuvent également être utiles.

Une partie de la décision sur le ou les outils à utiliser est la question à laquelle vous essayez de répondre. Essayez-vous simplement de trouver un modèle pour prédire les dates et heures futures? essayez-vous de tester pour voir si des prédicteurs particuliers sont significatifs dans le modèle? essayez-vous de comprendre la forme de la relation entre un prédicteur et le résultat? Autre chose?

Greg Snow
la source
3
X1,X2
y=F1(X1)+F2(X2)+F3(X1X2)+ε
gam
y=F1(X1)+F2(X2)+F3(X1)X2+F4(X2)X1+ε
by
1
@Macro, cela dépend si vous voulez diviser les cheveux ou non (eh bien techniquement ce que vous avez écrit serait peut-être am car vous n'utilisez pas vraiment la partie g).
Greg Snow
2
@Macro, je suis sûr que plus a été dit sur le sujet, mais voir la page 4 sur les GAM de cet article de Venable, Exegeses on Linear Models . On ne sait pas exactement comment les effets principaux non additifs et les effets d'interaction sont identifiés simultanément.
Andy W
Un grand merci pour vos commentaires. Mon objectif principal ici n'est pas de prédire les valeurs futures mais simplement de voir comment chaque série chronologique change par rapport à la moyenne des deux séries. Par exemple, le résultat de mod1 montre comment la série chronologique à chaque endroit varie de la moyenne d'abord à l'échelle de temps du jour de l'année (Doy) puis de l'heure du jour (Tod). À partir de cela, j'aimerais voir comment chaque série varie en fonction de Doy et Tod, dont je m'attends à ce que les séries chronologiques diffèrent considérablement pendant la période estivale.
KatyB
2
@AndyW Il est important de noter que les GAM ont parcouru un long chemin depuis que Venable les a commentés - les développements de la dernière décennie environ avec les splines pénalisées sensu Simon Wood (telles qu'implémentées en mgcv ) et les traitements entièrement bayésiens abordent des problèmes tels que sélection du lissage, interactions et comment les adapter (produits tensoriels de bases marginales étant une approche) dans le cadre du modèle additif. Je suis raisonnablement convaincu que les objections de Venable & Cox aux GAM, telles que décrites dans les exégèses de l'ancien, ont été largement prises en compte par ces développements récents de la théorie des GAM.
Rétablir Monica - G. Simpson
25

Pour deux variables continues, vous pouvez faire ce que vous voulez (que ce soit une interaction ou non, je vais laisser les autres discuter selon les commentaires de @ Greg's Answer) en utilisant:

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")

Le modèle plus simple devrait alors être imbriqué dans le modèle plus complexe ci-dessus. Ce modèle plus simple est:

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")

Notez deux choses ici:

  1. Le type de base pour chaque lisseur est indiqué. Dans ce cas, nous nous attendons à ce qu'il n'y ait aucune discontinuité dans Temp entre 23:59 et 00:00 Todni entre Doy == 1et Doy == 365.25. Par conséquent, les splines cubiques cycliques sont appropriées, indiquées ici via bs = "cc".
  2. La dimension de base est indiquée explicitement ( k = 5). Cela correspond à la dimension de base par défaut pour chaque lissage d'un te()terme.

Ensemble, ces fonctionnalités garantissent que le modèle plus simple est vraiment imbriqué dans le modèle plus complexe.

Pour plus d'informations, voir ?gam.modelsen mgcv .

Réintégrer Monica - G. Simpson
la source
Relatif à votre 2e point - en plus de la spécification de k, devrait-on également fixer le nombre de nœuds (par exemple fx=TRUE). Sinon, le modèle résultant montre des variations edfpour chaque terme.
Marc dans la loge du
Je devrais mettre à jour cette réponse un peu compte tenu des nouvelles fonctionnalités du package mgcv en termes de splines pour les bases marginales. Cela dit, je ne suis pas d'accord pour dire que vous devez fixer les degrés de liberté de la spline. L'essentiel est de s'assurer que les bases des modèles sont correctement imbriquées. Ensuite, des différences entre les modèles sont possibles en mettant à zéro certains des coefficients des fonctions de base, comme cela se produirait dans un modèle linéaire avec des termes non splines.
Reinstate Monica - G. Simpson
3
En espérant que quelqu'un regarde toujours ce fil et puisse répondre. Dans ces modèles, comment se fait-il que vous deviez spécifier les deux s(Doy...)et s(Doy, by =Loc...)? Je pensais que le premier serait imbriqué dans le second et donc inutile de préciser?
ego_
3
Non, le premier lissage est la fonction globale et le lissage par représente les différences spécifiques au site entre celui-ci et le lissage global. Les lissages par doivent vraiment y être m = 1ajoutés pour appliquer la pénalité sur la première dérivée des lissages de différence.
Rétablir Monica - G. Simpson
2
@JoshuaRosenberg Si vous voulez dire te(), cela dépend de ce que vous incluez dans le produit tensoriel? Les interactions décrites ici sont des interactions factorielles, mais te()impliqueraient deux variables continues ou plus. Si vous voulez des termes globaux et des déviations spécifiques au sujet, alors oui, te(DoY, Year, by = Loc, m = 1)pourrait être utilisé à côté te(DoY, Year), bien qu'il existe d'autres façons d'obtenir des choses similaires en utilisant une interaction factorielle lisse comme te()un effet aléatoire et des termes contenant une spline à effet aléatoire.
Rétablir Monica - G. Simpson