Нормализуйте значения оси Z на [0, 1] при использовании vis.gam для mgcv GAM

Я только что закончил установку ГАМа, используя mgcv пакет (назову эту модель gam1.5). Я играл с vis.gam и у меня есть вопрос, который я не смог решить.

Я хотел бы нормализовать установленные значения моей модели, поэтому, когда я использую vis.gamось z имеет пределы [0, 1].

Моя идея состояла в том, чтобы применить формулу нормализации в $fitted.values моей модели GAM следующим образом:

gam1.5$fitted.values<-(gam1.5$fitted.values-min(gam1.5$fitted.values))/(max(gam1.5$fitted.values)-min(gam1.5$fitted.values))

Тем не менее, когда я запускаю vis.gam, это не меняет масштаб оси Z. Мне было интересно, если я применяю формулу нормализации к неправильному объекту (другой $fitted.values) внутри объекта GAM.

1 ответ

Решение

Да. Так как vis.gam основывается на predict.gam и ваше изменение в $fitted.values не имеет никакого эффекта!

На самом деле, вы не можете достичь своей цели с vis.gam, Эта функция просто создает график и ничего не возвращает пользователю для последующего воспроизведения графика (если только vis.gam называется снова). Это означает, что нам нужно будет работать с predict.gam, Вот основные шаги.

  • Установите 2D сетку / сетку. Вы можете использовать exclude.too.far фильтровать данные далеко от обучающих данных, чтобы избежать нелепой сплайн / полиномиальной экстраполяции (как vis.gam делает);
  • Построить новый фрейм данных newdat (из приведенной выше сетки) и позвоните oo <- predict.gam(gam1.5, newdat, type = "terms") чтобы получить прогноз по срокам. Это матрица. Вам нужно сохранить только столбец, связанный с 2D-сглаживанием, которое вы хотите построить. Допустим, этот столбец хранится в векторе z;
  • увеличение z в матрицу путем заполнения NA для тех слишком далеких данных.
  • нормировать z на [0, 1],
  • использование image или же contour подготовить сюжет самостоятельно.

В идеале мы должны взять пример (может быть, из ?vis.gam) и проработайте вышеуказанные шаги. Тем не менее, вы вернулись ко мне, сказав, что вы быстро разобрались с проблемой, используя predict.gam, Тогда я не буду добавлять примеры для демонстрации.

Другие вопросы по тегам