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 gam
wird 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?).
r
time-series
data-visualization
gam
KatyB
quelle
quelle
Antworten:
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
by
Argument to verwendens
. Sie können dies so erweitern, dass das Argumentby
eine 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?
quelle
gam
by
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):
Das einfachere Modell sollte dann im komplexeren Modell oben verschachtelt sein. Das einfachere Modell ist:
Beachten Sie hier zwei Dinge:
Tod
und zwischenDoy == 1
und gibtDoy == 365.25
. Daher sind zyklische kubische Splines geeignet, die hier über angegeben sindbs = "cc"
.k = 5
). Dies entspricht der Standardbasisdimension für jede Glättung in einemte()
Term.Zusammen stellen diese Funktionen sicher, dass das einfachere Modell wirklich im komplexeren Modell verschachtelt ist.
Weitere Informationen finden Sie
?gam.models
in mgcv .quelle
k
, sollte man auch die Anzahl der Knoten festlegen (zBfx=TRUE
). Wenn nicht, zeigt das resultierende Modell eine Variationedf
für jeden Begriff.s(Doy...)
und angeben müssens(Doy, by =Loc...)
? Ich dachte der erste wäre in den letzteren geschachtelt und somit nicht näher zu spezifizieren?m = 1
addiert werden, um die Strafe für die Differenz-Smooths auf die erste Ableitung zu setzen.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. Este(DoY, Year)
gibt jedoch auch andere Möglichkeiten, um ähnliche Ergebnisse mit zufälligen Effekten zu erzielente()
.