Come includere un termine di interazione in GAM?


24

Il codice seguente valuta la somiglianza tra due serie storiche:

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

Qui, gamviene utilizzato per valutare in che modo la temperatura a New York e Miami varia dalla temperatura media (di entrambe le località) in diversi momenti della giornata. Il problema che ho ora è che ho bisogno di includere un termine di interazione che mostri come la temperatura di ogni posizione varia durante il giorno per diversi giorni dell'anno. Spero infine di visualizzare tutte queste informazioni su un grafico (per ogni posizione). Quindi, per Miami spero di avere un grafico che mostra come la temperatura varia dalla media in diversi momenti della giornata e diversi periodi dell'anno (grafico 3D?)


2
Potresti trovare pertinente la risposta a questa domanda stats.stackexchange.com/questions/18937/… .
jbowman,

Risposte:


18

"A" in "gam" sta per "additivo", il che significa che non ci sono interazioni, quindi se si adattano alle interazioni non si sta più adattando un modello di gam.

Detto questo, ci sono modi per ottenere alcune interazioni come termini all'interno dei termini additivi in ​​un gam, stai già usando uno di quelli usando l' byargomento to s. Potresti provare ad estendere questo ad avere l'argomento bycome una matrice con una funzione (sin, cos) di doy o tod. Potresti anche adattare le spline di livellamento in un modello lineare regolare che consenta interazioni (questo non fornisce il backfitting che il gam fa, ma potrebbe comunque essere utile).

Potresti anche considerare la regressione della ricerca della proiezione come un altro strumento adatto. Anche i modelli loess o più parametrici (con sin e / o cos) potrebbero essere utili.

Parte della decisione su quale strumento / i usare / e è la domanda a cui stai cercando di rispondere. Stai solo cercando un modello per prevedere date e orari futuri? stai provando a verificare se determinati predittori sono significativi nel modello? stai cercando di capire la forma della relazione tra un predittore e il risultato? Qualcos'altro?


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, dipende da se vuoi dividere i peli o no (bene, tecnicamente, quello che hai scritto potrebbe essere, visto che non stai usando la parte g).
Greg Snow,

2
@Macro, sono sicuro che sia stato detto di più sull'argomento, ma vedi pagina 4 sui GAM di questo articolo di Venable, Exegeses on Linear Models . Non è chiaro esattamente come vengano identificati contemporaneamente gli effetti principali non additivi e gli effetti di interazione.
Andy W,

Molte grazie per i tuoi commenti. Il mio obiettivo principale qui è non prevedere i valori futuri ma semplicemente vedere come ogni serie temporale si altera dalla media di entrambe le serie. Ad esempio, il risultato di mod1 mostra come le serie temporali in ciascuna posizione variano dalla media in primo luogo nella scala temporale del giorno dell'anno (Doy) e quindi dell'ora del giorno (Tod). Da questo vorrei vedere come ogni serie varia in funzione di Doy e Tod, che mi aspetto che le serie storiche differiscano notevolmente durante il periodo estivo.
KatyB,

2
@AndyW È importante notare che i GAM hanno fatto molta strada da quando Venable li ha commentati - sviluppi nell'ultimo decennio o giù di lì con lo splines sensu sensu Simon Wood (come implementato in mgcv ) e i trattamenti completamente bayesiani affrontano questioni come selezione della scorrevolezza, interazioni e come adattarle (i prodotti tensoriali di basi marginali rappresentano un approccio) nel framework del modello additivo. Sono ragionevolmente fiducioso che le obiezioni di Venable e Cox ai GAM, come delineate nelle Exegeses della prima, siano state ampiamente affrontate da questi recenti sviluppi nella teoria della GAM.
Ripristina Monica - G. Simpson,

25

Per due variabili continue, puoi fare quello che vuoi (se si tratta di un'interazione o meno, lascerò che gli altri discutano come da commenti a @ Greg's Answer) 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")

Il modello più semplice dovrebbe quindi essere nidificato all'interno del modello più complesso sopra. Quel modello più semplice è:

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

Nota due cose qui:

  1. Viene indicato il tipo di base per ogni più liscio. In questo caso ci aspetteremmo che non ci siano discontinuità a Temp tra le 23:59 e le 00:00 Todné tra Doy == 1e tra Doy == 365.25. Quindi le spline cubiche cicliche sono appropriate, indicate qui tramite bs = "cc".
  2. La dimensione di base è indicata esplicitamente ( k = 5). Questo corrisponde alla dimensione base predefinita per ogni smooth in un te()termine.

Insieme, queste caratteristiche assicurano che il modello più semplice sia realmente nidificato all'interno del modello più complesso.

Per di più vedi ?gam.modelsin mgcv .


In relazione al secondo punto - oltre alle specifiche di k, si dovrebbe anche fissare il numero di nodi (ad es fx=TRUE.). In caso contrario, il modello risultante mostra variazioni edfper ciascun termine.
Marc nella scatola

Dovrei aggiornare un po 'questa risposta, date alcune nuove funzionalità nel pacchetto mgcv in termini di spline per basi marginali. Detto questo, non sono d'accordo sul fatto che è necessario fissare i gradi di libertà per la spline. La chiave è garantire che le basi per i modelli siano opportunamente nidificate. Quindi sono possibili differenze tra i modelli impostando alcuni coefficienti per le funzioni di base su zero, proprio come accadrebbe in un modello lineare con termini non spline.
Ripristina Monica - G. Simpson,

3
Spero che qualcuno stia ancora guardando questa discussione e possa rispondere. In questi modelli, come mai è necessario specificare sia s(Doy...)e s(Doy, by =Loc...)? Pensavo che il primo sarebbe stato annidato in quest'ultimo e che quindi non sarebbe necessario specificarlo?
ego_

3
No, il primo smooth è la funzione globale e by smooth rappresenta le differenze specifiche del sito tra esso e il smooth globale. Tuttavia, è necessario m = 1aggiungere loro i smooth per mettere la penalità sulla prima derivata per le smooth.
Ripristina Monica - G. Simpson,

2
@JoshuaRosenberg Se vuoi dire te(), dipende da cosa stai includendo nel prodotto tensore? Le interazioni qui descritte sono interazioni uniformi ai fattori, ma te()implicherebbero due o più variabili continue. Se vuoi termini globali e deviazioni specifiche del soggetto, allora sì, te(DoY, Year, by = Loc, m = 1)potrebbe essere usato a fianco te(DoY, Year), anche se ci sono altri modi per ottenere cose simili usando interazioni casuali simili a fattori-effetto e te()termini contenenti una spline di effetti casuali.
Ripristina Monica - G. Simpson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.