Wie füge ich einen Interaktionsbegriff in GAM ein?


24

Der folgende Code bewertet die Ähnlichkeit zwischen zwei Zeitreihen:

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

Hier gamwird ausgewertet, wie sich die Temperatur in New York und Miami von der Durchschnittstemperatur (an beiden Standorten) zu verschiedenen Tageszeiten unterscheidet. Das Problem, das ich jetzt habe, ist, dass ich einen Interaktionsbegriff einfügen muss, der zeigt, wie sich die Temperatur an jedem Ort an den verschiedenen Tagen des Jahres täglich ändert. Ich hoffe schließlich, alle diese Informationen in einem Diagramm (für jeden Standort) anzuzeigen. Daher hoffe ich, für Miami eine Grafik zu haben, die zeigt, wie die Temperatur zu verschiedenen Tageszeiten und zu verschiedenen Jahreszeiten vom Durchschnitt abweicht (3D-Darstellung?).


2
Möglicherweise finden Sie die Antwort auf diese Frage stats.stackexchange.com/questions/18937/… relevant.
Bogenschütze

Antworten:


18

Das "a" in "gam" steht für "additive", was bedeutet, dass keine Interaktionen mehr vorhanden sind. Wenn Sie also Interaktionen anpassen, passen Sie wirklich kein Gam-Modell mehr an.

Das heißt, es gibt Möglichkeiten, Interaktionen wie Begriffe innerhalb der additiven Begriffe in einem Spiel zu erzeugen. Sie verwenden bereits einen dieser Begriffe, indem Sie das byArgument to verwenden s. Sie können dies so erweitern, dass das Argument byeine Matrix mit einer Funktion (sin, cos) von doy oder tod ist. Sie können auch einfach Glättungssplines in ein reguläres lineares Modell einfügen, das Interaktionen ermöglicht (dies gibt nicht die Nachrüstung, die Gam vornimmt, kann aber dennoch nützlich sein).

Sie könnten auch die Projektionsstreben-Regression als ein weiteres Anpassungswerkzeug betrachten. Löss oder parametrischere Modelle (mit sin und / oder cos) könnten ebenfalls nützlich sein.

Ein Teil der Entscheidung, welche Tools verwendet werden sollen, ist die Frage, die Sie beantworten möchten. Versuchen Sie nur ein Modell zu finden, um zukünftige Daten und Zeiten vorherzusagen? Versuchen Sie zu testen, ob bestimmte Prädiktoren im Modell von Bedeutung sind? Versuchen Sie, die Form der Beziehung zwischen einem Prädiktor und dem Ergebnis zu verstehen? Etwas anderes?


3
Angenommen, Sie haben zwei Prädiktoren x1,x2
y=f1(x1)+f2(x2)+f3(x1x2)+ε
gam
y=f1(x1)+f2(x2)+f3(x1)x2+f4(x2)x1+ε
by

1
@Macro, es kommt darauf an, ob du Haare spalten willst oder nicht (naja technisch wäre das, was du geschrieben hast, vielleicht ams, da du den g-Teil nicht wirklich verwendest).
Greg Snow

2
@Macro, ich bin sicher, es wurde mehr zu diesem Thema gesagt, aber siehe Seite 4 zu GAMs in diesem Venable-Artikel, Exegeses on Linear Models . Es ist nicht klar, wie nicht-additive Haupteffekte und Interaktionseffekte gleichzeitig identifiziert werden.
Andy W

Vielen Dank für Ihre Kommentare. Mein Hauptziel hierbei ist es, keine zukünftigen Werte vorherzusagen, sondern nur zu sehen, wie sich jede Zeitreihe vom Mittelwert beider Reihen ändert. Das Ergebnis von mod1 zeigt zum Beispiel, wie sich die Zeitreihen an jedem Ort vom Mittelwert unterscheiden, und zwar zunächst auf der Zeitskala des Jahres (Doy) und dann der Tageszeit (Tod). Davon ausgehend möchte ich sehen, wie sich die einzelnen Serien bei einer Funktion von Doy und Tod unterscheiden, von denen ich erwarte, dass sich die Zeitreihen im Sommer stark unterscheiden.
KatyB

2
@AndyW Es ist wichtig anzumerken, dass GAMs einen langen Weg zurückgelegt haben, seit Venable sie kommentiert hat - Entwicklungen in den letzten zehn Jahren mit den bestraften Splines sensu Simon Wood (wie in mgcv implementiert ) und den vollständig bayesianischen Behandlungen, die sich mit Themen wie befassen Auswahl der Glätte, Wechselwirkungen und deren Anpassung (Tensorprodukte von Randbasen sind ein Ansatz) im Rahmen des additiven Modells. Ich bin recht zuversichtlich , Venable u Cox Einwände gegen GAMs wie in dem ehemaligen skizzierte Exegesen haben in hohem Maße durch diese jüngsten Entwicklungen in GAM Theorie gerichtet.
Setzen Sie Monica - G. Simpson am

25

Für zwei stetige Variablen können Sie dann tun, was Sie wollen (ob dies eine Interaktion ist oder nicht, ich überlasse es anderen, gemäß den Kommentaren zu @ Gregs Antwort zu diskutieren):

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

Das einfachere Modell sollte dann im komplexeren Modell oben verschachtelt sein. Das einfachere Modell ist:

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

Beachten Sie hier zwei Dinge:

  1. Der Basistyp für jeden Glätter ist angegeben. In diesem Fall würden wir erwarten, dass es in Temp keine Unterbrechungen zwischen 23:59 und 00:00 für Todund zwischen Doy == 1und gibt Doy == 365.25. Daher sind zyklische kubische Splines geeignet, die hier über angegeben sind bs = "cc".
  2. Die Basisdimension wird explizit angegeben ( k = 5). Dies entspricht der Standardbasisdimension für jede Glättung in einem te()Term.

Zusammen stellen diese Funktionen sicher, dass das einfachere Modell wirklich im komplexeren Modell verschachtelt ist.

Weitere Informationen finden Sie ?gam.modelsin mgcv .


Bezogen auf Ihren 2. Punkt - neben der Angabe von k, sollte man auch die Anzahl der Knoten festlegen (zB fx=TRUE). Wenn nicht, zeigt das resultierende Modell eine Variation edffür jeden Begriff.
Marc in der Box

Ich sollte diese Antwort ein wenig aktualisieren, da das mgcv- Paket einige neue Funktionen in Bezug auf Splines für marginale Basen enthält. Trotzdem stimme ich nicht zu, dass Sie die Freiheitsgrade für den Spline festlegen müssen. Der Schlüssel besteht darin, sicherzustellen, dass die Basen für die Modelle entsprechend verschachtelt sind. Dann sind Unterschiede zwischen den Modellen möglich, indem einige der Koeffizienten für die Basisfunktionen auf Null gesetzt werden, wie dies bei einem linearen Modell mit nicht-spline-Termen der Fall wäre.
Setzen Sie Monica - G. Simpson

3
Ich hoffe, jemand schaut sich diesen Thread noch an und kann antworten. Wie kommt es, dass Sie in diesen Modellen beides s(Doy...)und angeben müssen s(Doy, by =Loc...)? Ich dachte der erste wäre in den letzteren geschachtelt und somit nicht näher zu spezifizieren?
ego_

3
Nein, die erste Glättung ist die globale Funktion und die durch Glättung repräsentieren ortsspezifische Unterschiede zwischen ihr und der globalen Glättung. Die By-Smooths müssen wirklich m = 1addiert werden, um die Strafe für die Differenz-Smooths auf die erste Ableitung zu setzen.
Setzen Sie Monica - G. Simpson am

2
@JoshuaRosenberg Wenn Sie meinen te(), kommt es darauf an, was Sie in das Tensorprodukt aufnehmen? Die hier beschriebenen Wechselwirkungen sind faktorglatte Wechselwirkungen, te()implizieren jedoch zwei oder mehr stetige Variablen. Wenn Sie globale Ausdrücke und fachspezifische Abweichungen wünschen, te(DoY, Year, by = Loc, m = 1)können Sie diese auch verwenden. Es te(DoY, Year)gibt jedoch auch andere Möglichkeiten, um ähnliche Ergebnisse mit zufälligen Effekten zu erzielen te().
Setzen Sie Monica - G. Simpson am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.