2016-05-24 5 views
1

Я пытаюсь извлечь размещение узлов из модели GAM, чтобы разграничить мою переменную-предиктор на категории для другой модели. Мои данные содержат переменную двоичного ответа (используется) и непрерывный предиктор (открытый).mgcv: Extract Knot Locations для `tp` smooth from the GAM model

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. Этот второй пункт больше из любопытства, чем что-либо.

ответ

0

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

  1. Вы должны быть помечены на ваш вопрос R и mgcv когда просят;
  2. Сначала я хочу отметить ваш вопрос как дубликат mgcv: how to extract knots, basis, coefficients and predictions for P-splines in adaptive smooth?, поднятый вчера, и my answer должно быть очень полезно. Но потом я понял, что на самом деле есть какая-то разница. Поэтому я приведу здесь краткое объяснение.

Ответ:

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

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

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

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

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

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

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

+0

Спасибо за понимание. Единственное, что я добавил после попытки, это то, что команда для гладких $ узлов, которые вы продемонстрировали в предыдущем ответе, будет гладкой $ xp при использовании кубических регрессионных сплайнов (bs = "cr"). В связи с этим вопросом тогда, в то время как адаптивная гладкая является подходящим узлом с использованием по умолчанию 40 узлов, равномерно распределенных по диапазону переменной, является кубическим сплайном, оценивающим наилучшее количество узлов (равномерное пространство также) на основе перекрестной проверки (в моем случае я получаю 9?). Еще раз спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^