Poniższy kod ocenia podobieństwo między dwoma szeregami czasowymi:
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")
Tutaj gam
służy do oceny, jak temperatura w Nowym Jorku i Miami różni się od średniej temperatury (z obu lokalizacji) w różnych porach dnia. Problem, który mam teraz, polega na tym, że muszę dołączyć termin interakcji, który pokazuje, jak temperatura w każdej lokalizacji zmienia się w ciągu dnia w różnych dniach roku. W końcu mam nadzieję wyświetlić wszystkie te informacje na jednym wykresie (dla każdej lokalizacji). Tak więc, dla Miami mam nadzieję, że mam jeden wykres, który pokazuje, jak temperatura różni się od średniej w różnych porach dnia i różnych porach roku (wykres 3D?)
r
time-series
data-visualization
gam
KatyB
źródło
źródło
Odpowiedzi:
„A” w „gam” oznacza „addytywny”, co oznacza brak interakcji, więc jeśli pasujesz do interakcji, to tak naprawdę nie pasujesz już do modelu gry.
To powiedziawszy, istnieją sposoby na uzyskanie pewnych interakcji, takich jak warunki w ramach dodatków w grze, już używasz jednego z nich, używając
by
argumentu dos
. Możesz spróbować rozszerzyć to, aby argumentby
był macierzą z funkcją (sin, cos) doy lub tod. Możesz także po prostu dopasować wygładzanie splajnów w zwykłym modelu liniowym, który pozwala na interakcje (nie daje to dopasowania wstecznego, które robi gam, ale nadal może być przydatne).Możesz także spojrzeć na regresję pogoni za projekcją jako kolejne narzędzie dopasowania. Przydatne mogą być również modele Less lub więcej modeli parametrycznych (z sin i / lub cos).
Częścią decyzji o tym, jakich narzędzi użyć, jest pytanie, na które próbujesz odpowiedzieć. Czy po prostu próbujesz znaleźć model do przewidywania przyszłych dat i godzin? próbujesz sprawdzić, czy konkretne predyktory są istotne w modelu? próbujesz zrozumieć kształt relacji między predyktorem a wynikiem? Coś innego?
źródło
gam
by
W przypadku dwóch ciągłych zmiennych możesz zrobić to, co chcesz (niezależnie od tego, czy jest to interakcja, czy nie, pozostawiam do omówienia zgodnie z komentarzami do odpowiedzi @ Grega):
Prostszy model powinien być następnie zagnieżdżony w bardziej złożonym modelu powyżej. Ten prostszy model to:
Zwróć uwagę na dwie rzeczy tutaj:
Tod
ani pomiędzy,Doy == 1
aDoy == 365.25
. Dlatego odpowiednie są cykliczne splajny sześcienne, wskazane tutaj za pomocąbs = "cc"
.k = 5
). Jest to zgodne z domyślnym wymiarem podstawowym dla każdego wygładzenia wte()
terminie.Razem te funkcje zapewniają, że prostszy model naprawdę jest zagnieżdżony w bardziej złożonym modelu.
Więcej informacji
?gam.models
w mgcv .źródło
k
, należy również ustalić liczbę węzłów (npfx=TRUE
.). Jeśli nie, wynikowy model różni sięedf
dla każdego terminu.s(Doy...)
i drugies(Doy, by =Loc...)
? Myślałem, że pierwszy będzie zagnieżdżony w drugim, a zatem nie będzie trzeba go określać?m = 1
dodania, aby nałożyć karę na pierwszą pochodną za wygładzanie różnic.te()
, to zależy od tego, co zawierasz w produkcie tensor? Opisane tutaj interakcje są interakcjami gładko-czynnikowymi, alete()
implikują dwie lub więcej ciągłych zmiennych. Jeśli chcesz globalnych terminów i odchyleń specyficznych dla przedmiotu, to tak,te(DoY, Year, by = Loc, m = 1)
można użyć obokte(DoY, Year)
, chociaż istnieją inne sposoby na osiągnięcie podobnych rzeczy za pomocą interakcji płynnych z efektem podobnym do efektu ite()
terminów zawierających splajn efektu losowego.