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 ответ
Комментарии:
- Вы должны были пометить свой вопрос
R
а такжеmgcv
когда спрашиваешь; - Сначала я хочу пометить ваш вопрос как дубликат к 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-сплайны, естественные кубические сплайны - это сплайны на основе узлов.