Jak dołączyć termin interakcji w GAM?

24

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 gamsł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?)

KatyB
źródło
2
Odpowiedź na to pytanie może być odpowiednia stats.stackexchange.com/questions/18937/… .
łucznik

Odpowiedzi:

18

„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 byargumentu do s. Możesz spróbować rozszerzyć to, aby argument bybył 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?

Greg Snow
źródło
3
Załóżmy, że masz dwa predyktory - czy nadal jest grą? W pewnym sensie można to uznać za „interakcję”. Myślę też, że pakiet pozwala na dopasowanie modeli takich jak (co myślę, że robi to argument). Czy to wciąż gra? y = f 1 ( x 1 ) + f 2 ( x 2 ) + f 3 ( x 1 x 2 ) + ε y = f 1 ( x 1 ) + f 2 ( x 2 ) + f 3 ( x 1 ) x 2 + f 4 ( x 2x1,x2)
y=fa1(x1)+fa2)(x2))+fa3)(x1x2))+ε
gam
y=fa1(x1)+fa2)(x2))+fa3)(x1)x2)+fa4(x2))x1+ε
by
Makro
1
@Macro, to zależy od tego, czy chcesz podzielić włosy, czy nie (technicznie to, co napisałeś, może być moje, ponieważ tak naprawdę nie używasz części g).
Greg Snow,
2
@Macro, jestem pewien, że więcej na ten temat zostało powiedziane, ale patrz strona 4 na temat GAM tego artykułu Venable, Exegeses on Linear Models . Nie jest jasne, w jaki sposób jednocześnie identyfikowane są nieaddytywne główne efekty i efekty interakcji.
Andy W
wielkie dzięki za komentarze. Moim głównym celem jest nie przewidywanie przyszłych wartości, ale po prostu zobaczenie, jak każda seria czasowa zmienia się względem średniej z obu serii. Na przykład wynik mod1 pokazuje, w jaki sposób szeregi czasowe w każdej lokalizacji różnią się od średniej najpierw w skali czasowej dnia roku (Doy), a następnie pory dnia (Tod). Z tego chciałbym zobaczyć, jak każda seria różni się w zależności od Doy i Tod, co, jak sądzę, szereg czasowy będzie się znacznie różnić w okresie letnim.
KatyB
2
@AndyW Ważne jest, aby pamiętać, że GAM przeszły długą drogę, odkąd Venable's je komentował - rozwój w ciągu ostatniej dekady z karą za spline sensu Simona Wooda (jak zaimplementowano w mgcv ) i całkowicie bayesowskie zabiegi dotyczą takich problemów, jak: wybór gładkości, interakcje i sposób ich dopasowania (produkty tensorowe baz marginalnych są jednym podejściem) w strukturze modelu addytywnego. Jestem dość pewny, że sprzeciwy Venable & Cox wobec GAM przedstawione w Exegeses byłego stopnia zostały w dużej mierze uwzględnione przez ostatnie zmiany w teorii GAM.
Przywróć Monikę - G. Simpson
25

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

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

Prostszy model powinien być następnie zagnieżdżony w bardziej złożonym modelu powyżej. Ten prostszy model to:

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

Zwróć uwagę na dwie rzeczy tutaj:

  1. Określono typ podstawowy dla każdej wygładzającej. W tym przypadku spodziewalibyśmy się, że nie ma nieciągłości w Temp między 23:59 a 00:00 Todani pomiędzy, Doy == 1a Doy == 365.25. Dlatego odpowiednie są cykliczne splajny sześcienne, wskazane tutaj za pomocą bs = "cc".
  2. Wymiar podstawowy jest wyraźnie określony ( k = 5). Jest to zgodne z domyślnym wymiarem podstawowym dla każdego wygładzenia w te()terminie.

Razem te funkcje zapewniają, że prostszy model naprawdę jest zagnieżdżony w bardziej złożonym modelu.

Więcej informacji ?gam.modelsw mgcv .

Przywróć Monikę - G. Simpson
źródło
Odnosi się do twojego drugiego punktu - oprócz specyfikacji k, należy również ustalić liczbę węzłów (np fx=TRUE.). Jeśli nie, wynikowy model różni się edfdla każdego terminu.
Marc w pudełku
Powinienem trochę zaktualizować tę odpowiedź, biorąc pod uwagę nową funkcjonalność pakietu mgcv pod względem splajnów dla marginalnych baz. To powiedziawszy, nie zgadzam się, że musisz ustalić stopnie swobody dla splajnu. Kluczem jest upewnienie się, że podstawy modeli są odpowiednio zagnieżdżone. Zatem możliwe są różnice między modelami poprzez ustawienie niektórych współczynników funkcji bazowych na zero, tak jak by to miało miejsce w modelu liniowym z terminami nie splajnowymi.
Przywróć Monikę - G. Simpson
3
Mam nadzieję, że ktoś nadal ogląda ten wątek i może odpowiedzieć. Dlaczego w tych modelach musisz podać jedno s(Doy...)i drugie s(Doy, by =Loc...)? Myślałem, że pierwszy będzie zagnieżdżony w drugim, a zatem nie będzie trzeba go określać?
ego_
3
Nie, pierwsza gładkość jest funkcją globalną, a gładka reprezentuje specyficzne dla danego miejsca różnice między nią a globalną gładkością. Jednak wygładzanie przez naprawdę wymaga ich m = 1dodania, aby nałożyć karę na pierwszą pochodną za wygładzanie różnic.
Przywróć Monikę - G. Simpson
2
@JoshuaRosenberg Jeśli masz na myśli te(), to zależy od tego, co zawierasz w produkcie tensor? Opisane tutaj interakcje są interakcjami gładko-czynnikowymi, ale te()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ć obok te(DoY, Year), chociaż istnieją inne sposoby na osiągnięcie podobnych rzeczy za pomocą interakcji płynnych z efektem podobnym do efektu i te()terminów zawierających splajn efektu losowego.
Przywróć Monikę - G. Simpson