Как настроить сглаживание в модели mgcv GAM


14

Я пытаюсь выяснить, как контролировать параметры сглаживания в модели mgcv: gam.

У меня есть биноминальная переменная, которую я пытаюсь смоделировать, в первую очередь как функция координат x и y на фиксированной сетке, плюс некоторые другие переменные с меньшим влиянием. В прошлом я построил достаточно хорошую модель локальной регрессии, используя пакет locfit и только значения (x, y).

Однако я хочу попытаться включить другие переменные в модель, и похоже, что обобщенные аддитивные модели (GAM) были хорошей возможностью. Посмотрев на пакеты gam и mgcv, оба из которых имеют функцию GAM, я выбрал последнее, поскольку некоторые комментарии в ветках списка рассылки рекомендуют его. Недостатком является то, что он не поддерживает локальную регрессию, более гладкую, как лесс или локфит.

Для начала я просто хотел попытаться приблизительно воспроизвести модель locfit, используя только координаты (x, y). Я пробовал как с обычными, так и с тензорными сглаживаниями:

my.gam.te <- gam(z ~ te(x, y), family=binomial(logit), data=my.data, scale = -1)

my.gam.s  <- gam(z ~  s(x, y), family=binomial(logit), data=my.data, scale = -1)

Тем не менее, при построении прогнозов из модели они гораздо более сглажены по сравнению с моделью locfit. Поэтому я пытался настроить модель так, чтобы она не была слишком гладкой. Я пытался настроить параметры sp и k, но мне не ясно, как они влияют на сглаживание. В locfit параметр nn управляет диапазоном используемой окрестности, с меньшими значениями, обеспечивающими меньшее сглаживание и большую «покачиваемость», что помогает захватывать некоторые области в сетке, где вероятность биномиальных результатов быстро изменяется. Как бы я настроил игровую модель, чтобы она работала одинаково?

Ответы:


22

kАргумент эффективно устанавливает размерность матрицы сглаживающего для каждого термина. gam()использует оценку GCV или UBRE для выбора оптимального уровня сглаживания, но он может работать только в пределах размерности матрицы сглаживания. По умолчанию te()сглаживания имеют k = 5^2для 2d поверхностей. Я забыл, для чего это нужно, s()поэтому проверьте документы. Текущий совет Саймона Вуда, автора mgcv , заключается в том, что если степень гладкости, выбранная моделью, равна или близка к пределу размерности, налагаемой значением, используемым для k, вы должны увеличить kи переустановить модель, чтобы увидеть, если более сложная модель выбирается из более высокой размерной матрицы сглаживания.

Тем не менее, я не знаю, как работает locfit , но вам нужно что-то, что мешает вам установить слишком сложную поверхность (GCV и UBRE или (RE) ML, если вы решите использовать их [вы не можете, как вы set scale = -1], пытаемся сделать именно это), что не поддерживается данными. Другими словами, вы могли бы соответствовать очень локальным характеристикам данных, но соответствовали ли вы шуму в выборке собранных вами данных или соответствовали среднему значению распределения вероятностей? gam() может быть, вам что-то рассказывают о том, что можно оценить по вашим данным, предполагая, что вы разобрались с базисной размерностью (см. выше).

Еще одна вещь, на которую стоит обратить внимание, это то, что используемые в настоящее время сглаживатели являются глобальными в том смысле, что выбранная сглаженность применяется ко всему диапазону сглаживания. Адаптивные сглаживатели могут тратить выделенный «допуск» на гладкость в тех частях данных, где отклик быстро меняется. gam()имеет возможности для использования адаптивных сглаживателей.

Посмотрите ?smooth.termsи ?adaptive.smoothпосмотрите, что можно установить с помощью gam(). te()может комбинировать большинство, если не все эти сглаживатели (проверьте документы, для которых можно и нельзя включать в тензорные продукты), чтобы вы могли использовать адаптивную сглаживающую основу, чтобы попытаться отразить более тонкий локальный масштаб в тех частях данных, где ответ меняется быстро.

Я должен добавить, что вы можете получить R для оценки модели с фиксированным набором степеней свободы, используемых гладким термином, используя fx = TRUEаргумент to s()и te(). В принципе, набор к быть то , что вы хотите , и fx = TRUEи gam()будет просто соответствовать регрессионный сплайн фиксированных степеней свободы не нарушает регрессионный сплайн.


Большое спасибо, Гэвин, за такой подробный ответ. Я полностью пропустил адаптивные сглаживатели и попробую их. Я понимаю проблему переоснащения, но то, что я до сих пор делал с игрой, не показывало функции в данных, которые, как известно, были там благодаря экспертизе предметной области.
полковник трик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.