Нормализуйте значения оси 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
, Тогда я не буду добавлять примеры для демонстрации.