Как включить термин взаимодействия в 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используется для оценки того, как температура в Нью-Йорке и Майами отличается от средней температуры (в обоих местах) в разное время дня. Проблема, которая у меня сейчас есть, заключается в том, что мне нужно включить термин взаимодействия, который показывает, как температура каждого места меняется в течение дня в разные дни года. В конечном итоге я надеюсь отобразить всю эту информацию на одном графике (для каждого местоположения). Итак, для Майами я надеюсь иметь один график, который показывает, как температура меняется от среднего значения в разное время дня и в разное время года (трехмерный график?)

KatyB
источник
2
Вы можете найти ответ на этот вопрос stats.stackexchange.com/questions/18937/... актуален.
Jbowman

Ответы:

18

«A» в «gam» означает «аддитивный», что означает отсутствие взаимодействий, поэтому, если вы подходите к взаимодействиям, вы действительно больше не подходите к игровой модели.

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

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

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

Грег Сноу
источник
3
Предположим, у вас есть два предиктора - разве все еще игра? В некотором смысле это можно рассматривать как «взаимодействие». Кроме того, я думаю, что пакет позволяет вам подходить для таких моделей, как (что, как мне кажется, делает аргумент). Это все еще игра? 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 ( х 1 ) х 2 + ф 4 ( х 2)x1,x2
y=f1(x1)+f2(x2)+f3(x1x2)+ε
gam
y=f1(x1)+f2(x2)+f3(x1)x2+f4(x2)x1+ε
by
Макро
1
@Macro, это зависит от того, хотите ли вы подстричься или нет (технически то, что вы написали, может быть и есть, поскольку вы на самом деле не используете данную часть).
Грег Сноу
2
@Macro, я уверен, что по этому вопросу было сказано больше, но см. Стр. 4 о GAMs этой статьи Venable, Exegeses on Linear Models . Непонятно, как одновременно идентифицируются неаддитивные основные эффекты и эффекты взаимодействия.
Энди W
большое спасибо за ваши комментарии. Моя главная цель здесь - не предсказывать будущие значения, а просто увидеть, как каждый временной ряд изменяется от среднего значения обеих серий. Например, результат mod1 показывает, как временные ряды в каждом месте изменяются от среднего значения сначала по шкале времени года (Doy), а затем по времени суток (Tod). Из этого я хотел бы увидеть, как меняется каждая серия в зависимости от функций Дой и Тода, которые, как я ожидаю, будут сильно различаться во время летнего периода.
KatyB
2
@AndyW Важно отметить, что GAM прошли долгий путь с тех пор, как Venable прокомментировал их - события за последнее десятилетие или около того с наказанными сплайнами sensu Simon Wood (как реализовано в mgcv ) и полностью байесовские методы лечения, такие как выбор гладкости, взаимодействия и способы их подгонки (тензорные произведения маргинальных базисов являются одним из подходов) в рамках аддитивной модели. Я достаточно уверен, что возражения Венейбл и Кокса против GAM, изложенные в Exegeses , в значительной степени были учтены этими недавними разработками в теории GAM.
Восстановить Монику - Дж. Симпсон
25

Для двух непрерывных переменных вы можете делать то, что вы хотите (независимо от того, является ли это взаимодействие или нет, я оставлю других для обсуждения в соответствии с комментариями к ответу @ Greg's), используя:

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В mgcv .

Восстановить Монику - Дж. Симпсон
источник
Относительно вашего 2-го пункта - в дополнение к спецификации k, следует ли также фиксировать количество узлов (например fx=TRUE). Если нет, итоговая модель показывает различия edfдля каждого термина.
Марк в коробке
Я должен немного обновить этот ответ, учитывая некоторые новые функциональные возможности в пакете mgcv с точки зрения сплайнов для маргинальных баз. Тем не менее, я не согласен с тем, что вам нужно фиксировать степени свободы для сплайна. Ключ должен гарантировать, что основания для моделей должным образом вложены. Тогда различия между моделями возможны, если установить некоторые коэффициенты для базовых функций равными нулю, так же, как это происходит в линейной модели с неплайновыми членами.
Восстановить Монику - Дж. Симпсон
3
Надеюсь, кто-то все еще смотрит эту ветку и может ответить. Почему в этих моделях нужно указывать и то, s(Doy...)и другое s(Doy, by =Loc...)? Я думал, что первый будет вложен в последний и, следовательно, будет необязательно указывать?
ego_
3
Нет, первое сглаживание - это глобальная функция, а сглаживание представляет специфические для сайта различия между ним и глобальным сглаживанием. Сглаживания действительно нужно m = 1добавить к ним, чтобы наложить штраф на первую производную за сглаживание разницы.
Восстановить Монику - Дж. Симпсон
2
@JoshuaRosenberg Если вы имеете в виду te(), это зависит от того, что вы включаете в тензорный продукт? Взаимодействия, описанные здесь, являются факторно-гладкими взаимодействиями, но te()подразумевают две или более непрерывных переменных. Если вам нужны глобальные термины и предметно-специфические отклонения, тогда да, te(DoY, Year, by = Loc, m = 1)можно использовать вместе с ними te(DoY, Year), хотя есть и другие способы достижения аналогичных целей с использованием случайного эффекта, такого как фактор-гладкое взаимодействие, и te()терминов, содержащих случайный сплайн эффекта.
Восстановить Монику - Дж. Симпсон