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, gam
est 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?)
Réponses:
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'
by
argument tos
. Vous pouvez essayer d'étendre cela pour que l'argumentby
soit 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?
la source
gam
by
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:
Le modèle plus simple devrait alors être imbriqué dans le modèle plus complexe ci-dessus. Ce modèle plus simple est:
Notez deux choses ici:
Tod
ni entreDoy == 1
etDoy == 365.25
. Par conséquent, les splines cubiques cycliques sont appropriées, indiquées ici viabs = "cc"
.k = 5
). Cela correspond à la dimension de base par défaut pour chaque lissage d'unte()
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.models
en mgcv .la source
k
, devrait-on également fixer le nombre de nœuds (par exemplefx=TRUE
). Sinon, le modèle résultant montre des variationsedf
pour chaque terme.s(Doy...)
ets(Doy, by =Loc...)
? Je pensais que le premier serait imbriqué dans le second et donc inutile de préciser?m = 1
ajoutés pour appliquer la pénalité sur la première dérivée des lissages de différence.te()
, cela dépend de ce que vous incluez dans le produit tensoriel? Les interactions décrites ici sont des interactions factorielles, maiste()
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 commete()
un effet aléatoire et des termes contenant une spline à effet aléatoire.