mgcv: Извлечение местоположений узлов для `tp` smooth из модели GAM

Я пытаюсь извлечь расположение узлов из модели GAM, чтобы разграничить переменную предиктора по категориям для другой модели. Мои данные содержат двоичную переменную ответа (используется) и непрерывный предиктор (открытый).

data <- data.frame(Used = rep(c(1,0,0,0),1250),
                   Open = round(runif(5000,0,50), 0))

Я подхожу к GAM как таковой:

mod <- gam(Used ~ s(Open), binomial, data = data)

Я могу получить прогнозируемые значения, а также матрицу модели и т.д. type=c("response", "lpmatrix") в пределах predict.gam функция, но я борюсь с извлечением местоположений узла, в которых изменяются коэффициенты. Любое предложение действительно ценится!

out<-as.data.frame(predict.gam(model1, newdata = newdat, type = "response"))

Мне также было бы интересно, если это возможно сделать что-то вроде:

http://www.fromthebottomoftheheap.net/2014/05/15/identifying-periods-of-change-with-gams/

в котором статистическое увеличение / уменьшение сплайнов идентифицировано, однако, я не использую GAMM в этой точке, и, таким образом, у меня есть проблемы с идентификацией подобных характеристик модели в GAM, которые извлечены из его модели GAMM. Этот второй предмет более любопытен, чем что-либо еще.

1 ответ

Решение

Комментарии:

  1. Вы должны были пометить свой вопрос R а также mgcv когда спрашиваешь;
  2. Сначала я хочу пометить ваш вопрос как дубликат к mgcv: как извлечь узлы, базис, коэффициенты и прогнозы для P-сплайнов в адаптивном сглаживании? поднял вчера, и мой ответ там должен быть довольно полезным. Но потом я понял, что на самом деле есть какая-то разница. Поэтому я сделаю краткое объяснение здесь.

Ответ:

В вашем gam вызов:

mod <- gam(Used ~ s(Open), binomial, data = data)

вы не указали bs аргумент в s() поэтому база по умолчанию: bs = 'tp' будет использоваться.

'tp' Сокращение от сплайна регрессии тонких пластин не является гладким классом с обычными узлами. Сплайн на тонкой пластине имеет узлы: он размещает узлы точно в точках данных. Например, если у вас есть n уникальный Open значения, то это имеет n узлы. В одномерном случае это просто сглаживающий сплайн.

Тем не менее, сплайн регрессии тонких пластин является приближением низкого ранга к полному сплайну тонких пластин, основанному на усеченном собственном разложении. Эта идея аналогична анализу основных компонентов (PCA). Вместо использования оригинала n номер тонкой пластины сплайнового основания, используется первый k основные компоненты. Это уменьшает сложность вычислений от O(n^3) до O(nk^2), обеспечивая при этом оптимальное приближение ранга k.

В результате на самом деле нет никаких узлов, которые можно извлечь для подогнанного сплайна тонкой пластины.

Так как вы работаете с одномерным сплайном, вам не нужно 'tp', Просто используйте bs = 'cr', сплайны кубической регрессии. Раньше это было по умолчанию в mgcv до 2003 года, когда tp стало доступно. cr имеет узлы, и вы можете извлечь узлы, как я показал в своем ответе. Не смущайтесь bs = 'ad' в этом вопросе: P-сплайны, B-сплайны, естественные кубические сплайны - это сплайны на основе узлов.

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