Ваш вопрос не относится к семейству «Твиди»; это общая mgcv
функция при выборе модели.
mgcv
не использует step.gam
для выбора модели. Я думаю, что ваше замешательство связано с другим пакетом gam
, который будет использовать step.gam
для последовательного добавления / удаления термина и отчетов AIC. Когда вы идете ?step.gam
в mgcv
, он отсылает вас к ?gam.selection
. ?step.gam
намеренно оставлен там на случай, если его обыщут. Но все подробности изложены в ?gam.selection
.
Нет необходимости делать step.gam
в mgcv
. Оценка модели и выбор модели интегрированы в mgcv
. Для сплайна регрессии / сглаживания со штрафом, когда параметр сглаживания стремится к бесконечности (очень большой), его вторая производная сбрасывается до нуля, оставляя простой линейный член. Например, если мы укажем такую модель, как:
y ~ s(x1, bs = 'cr') + s(x2, bs = 'cr')
в то время как s(x2)
является ложным модельным термином и не должен включаться в модель, тогда mgcv:::gam/bam
уменьшится s(x2)
до x2
после оценки, в результате чего получится такая модель:
y ~ s(x1) + x2
Это означает, что когда вы используете plot.gam()
для проверки предполагаемой гладкой функции для каждого члена модели, s(x1)
- это кривая, а s(x2)
- прямая линия.
Теперь это не совсем удовлетворительно. Для полного и успешного выбора модели мы хотим также отбросить x2
, т.е. сжать s(x2)
до 0, чтобы получить модель в виде обозначений:
y ~ s(x1)
Но добиться этого несложно. Мы можем использовать класс сглаживания усадки bs = 'ts'
(регрессионный сплайн с усадочной тонкой пластиной, в отличие от обычного tp
) или bs = cs'
(сглаживающий сплайн с кубической регрессией, в отличие от обычного 'cr'), а mgcv:::gam/bam
должен иметь возможность сжимать s(x2)
до 0. Математика, лежащая в основе этого, заключается в том, что mgcv
изменит собственные значения линейного члена (т. Е. Пустое пространство) с 0 до 0,1, небольшого, но положительного числа, так что штрафные санкции будут влиять на линейный член. В результате, когда вы сделаете plot.gam()
, вы увидите, что s(x2)
- это горизонтальная линия на 0.
bs = 'cs'
или bs = 'ts'
должны быть помещены в функцию s()
; но mgcv
также позволяет вам оставить bs = 'cr'
или bs = 'tp'
нетронутыми в s()
, но поместить select = TRUE
в gam()
или bam()
. select = TRUE
- это более общий подход, поскольку сглаживание усадки на данный момент имеет только классы cs
и ts
, в то время как select = TRUE
работает для всех видов сглаживания. По сути, они делают то же самое, увеличивая собственные значения 0 до 0,1.
Следующий пример взят из примера под ?gam.selection
. Обратите внимание, как select = TRUE
сокращает несколько членов до 0, давая информативный выбор модели.
library(mgcv)
set.seed(3);n<-200
dat <- gamSim(1,n=n,scale=.15,dist="poisson") ## simulate data
dat$x4 <- runif(n, 0, 1);dat$x5 <- runif(n, 0, 1) ## spurious
b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+s(x4)+s(x5),data=dat,
family=poisson,select=TRUE,method="REML")
summary(b)
plot.gam(b,pages=1)
![усадка](https://i.stack.imgur.com/14gea.jpg)
Обратите внимание, что p-values
в summary.gam()
также свидетельствует о таком выборе:
Approximate significance of smooth terms:
edf Ref.df Chi.sq p-value
s(x0) 1.7655119 9 5.264 0.0397 *
s(x1) 1.9271039 9 65.356 <2e-16 ***
s(x2) 6.1351372 9 156.204 <2e-16 ***
s(x3) 0.0002618 9 0.000 0.4088
s(x4) 0.0002766 9 0.000 1.0000
s(x5) 0.1757146 9 0.195 0.2963
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.545 Deviance explained = 51.6%
-REML = 430.78 Scale est. = 1 n = 200
person
Zheyuan Li
schedule
20.05.2016