Як включити термін взаємодії в GAM?


24

Наступний код оцінює схожість двох часових рядів:

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

Тут gamвикористовується для оцінки того, як температура в Нью-Йорку та Маямі змінюється від середньої температури (в обох місцях) у різний час доби. Проблема, яка зараз у мене, полягає в тому, що мені потрібно включити термін взаємодії, який показує, як температура кожного місця змінюється протягом дня в різні дні року. Зрештою сподіваюся відобразити всю цю інформацію на одному графіку (для кожного місця). Отже, для Маямі я сподіваюся мати один графік, який показує, як температура змінюється від середньої температури в різні пори дня та різні пори року (3d графік?)


2
Ви можете знайти відповідь на це питання stats.stackexchange.com/questions/18937/… .
джобмен

Відповіді:


18

"A" в "gam" означає "добавка", що означає відсутність взаємодій, тому якщо ви підходите до взаємодій, ви справді вже не підходите до ігрової моделі.

При цьому, є способи отримати деяку взаємодію, як, наприклад, терміни в рамках додаючого терміна в геймі, ви вже використовуєте один із них, використовуючи byаргумент до s. Ви можете спробувати поширити це на те, щоб аргумент byбув матрицею з функцією (sin, cos) doy або tod. Ви також можете просто помістити згладжуючі сплайни в звичайну лінійну модель, яка дозволяє взаємодіяти (це не дає підгонки, що робить гра, але все ж може бути корисною).

Ви також можете розглядати регресію проекційного переслідування як інший підходящий інструмент. Льосові або більше параметричних моделей (з гріхом та / або cos) також можуть бути корисними.

Частина рішення щодо того, який інструмент (и) використовувати, - це питання, на яке ви намагаєтесь відповісти. Ви просто намагаєтесь знайти модель, щоб передбачити майбутні дати та час? ви намагаєтесь перевірити, чи є конкретні прогнози важливими в моделі? чи намагаєтесь ви зрозуміти форму взаємозв'язку між передбачувачем та результатом? Щось ще?


3
х1,х2
у=f1(х1)+f2(х2)+f3(х1х2)+ε
gam
у=f1(х1)+f2(х2)+f3(х1)х2+f4(х2)х1+ε
by

1
@Macro, Це залежить від того, хочете ви розділити волоски чи ні (технічно добре, що ви написали, можливо, є, оскільки ви не використовуєте частку g).
Грег Сніг

2
@Macro, я впевнений, що більше було сказано з цього приводу, але дивіться сторінку 4 про GAMs цієї статті Venable, Exegeses на лінійних моделях . Не точно зрозуміло, як одночасно ідентифікуються неадитивні основні ефекти та ефекти взаємодії.
Енді Ш

велике спасибі за ваші коментарі. Моя головна мета тут - не передбачити майбутні значення, а просто побачити, як кожен часовий ряд змінюється від середнього значення для обох рядів. Наприклад, результат mod1 показує, як часовий ряд у кожній локації змінюється від середнього значення спочатку за часовою шкалою дня року (Doy), а потім часу доби (Tod). З цього я хотів би побачити, як кожна серія змінюється залежно від функції Дої і Тода, від чого я очікую, що часовий ряд сильно відрізнятиметься в літній період.
KatyB

2
@AndyW Важливо відзначити, що GAM пройшли довгий шлях з тих пір, як Venable's коментував їх - події за останнє десятиліття або близько того із санкціонованим сенсацією сплайсів Саймоном Вудом (як це було застосовано в mgcv ) та повністю байєсівськими методами лікування, які стосуються таких питань, як вибір гладкості, взаємодії та те, як їх вписати (тензорні продукти граничних основ є одним підходом) в рамках додаткової моделі. Я досить впевнений, що заперечення Venable & Cox щодо GAM, викладені в колишніх Exegeses , значною мірою були вирішені цими останніми розробками в теорії GAM.
Відновіть Моніку - Г. Сімпсон

25

Для двох безперервних змінних ви можете робити все, що завгодно (будь то взаємодія чи ні, я залишаю інших обговорювати відповідно до коментарів до відповіді @ Greg), використовуючи:

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

Потім простіша модель повинна вкладатись у складнішу модель. Ця простіша модель:

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

Зверніть увагу на дві речі тут:

  1. Зазначається тип основи для кожного плавного. В цьому випадку можна було б очікувати , що немає ні одного розривів в Temp між 23:59 І 00:00 для Todні між Doy == 1і Doy == 365.25. Отже, циклічні кубічні сплайни підходять, зазначені тут через bs = "cc".
  2. Базовий вимір вказано явно ( k = 5). Це відповідає базовому розміру за замовчуванням для кожного гладкого в te()терміні.

Ці функції разом забезпечують, що простіша модель дійсно вкладається в складнішу модель.

Докладніше див. ?gam.modelsУ мгкв .


Пов’язане з вашим другим пунктом - крім специфікації k, чи слід також фіксувати кількість вузлів (наприклад fx=TRUE). Якщо ні, то отримана модель показує різницю edfдля кожного терміну.
Марк у коробці

Я повинен трохи оновити цю відповідь, враховуючи деякі нові функціональні можливості пакета mgcv з точки зору сплайнів для граничних баз. Однак, я не згоден з тим, що вам потрібно зафіксувати ступінь свободи. Головне - забезпечити належне вкладені основи моделей. Тоді різниці між моделями можливі, встановивши на нуль деякі коефіцієнти базових функцій так, як це відбудеться в лінійній моделі з нелінійними членами.
Відновіть Моніку - Г. Сімпсон

3
Сподіваючись, що хтось ще дивиться цю тему і може відповісти. Як у цих моделях потрібно вказати і те, s(Doy...)і s(Doy, by =Loc...)? Я думав, що перший буде вкладений у другий і, таким чином, не потрібно вказувати?
его_

3
Ні, перший гладкий - це глобальна функція, а "гладкий" - це відмінні відмінності між сайтом і глобальною функцією. До них, дійсно, потрібно m = 1додати штраф, щоб накласти штраф на першу похідну за різницю.
Відновіть Моніку - Г. Сімпсон

2
@JoshuaRosenberg Якщо ви хочете сказати te(), це залежить від того, що ви включаєте в продукт тензора? Описані тут взаємодії є взаємодією, що взаємодіє з факторами, але мають на te()увазі дві або більше безперервних змінних. Якщо ви хочете, щоб глобальні терміни та специфічні відхилення від предмета, тоді так, te(DoY, Year, by = Loc, m = 1)можна використовувати поряд te(DoY, Year), хоча є й інші способи досягти подібних речей, використовуючи випадкову взаємодію як фактор-рівну взаємодію та te()терміни, що містять сплайн випадкового ефекту.
Відновіть Моніку - Г. Сімпсон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.