Ваш вопрос не относится к семейству «Tweedie»; это общая функция 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, чтобы получить notationally модель:
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)
Обратите внимание, что, то 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
Привет Zheyuan. Да, очень полезно, спасибо большое. Мне нужно сесть и понять, как это сглаживание работает. Быстрый вопрос: имеет ли функция Tweedie mgcv функцию Select = TRUE и Method = RELM? Еще раз спасибо –
Я вижу, что вы можете использовать family = Tweedie в игре, или вы можете использовать функцию Tweedie. Пока не уверены в их различии. Вот почему я спросил, может ли выбор и метод использоваться в Tweedie. Но то, что вы сказали, имеет смысл, спасибо. –
Ах, это передано семье, вы получили, большое спасибо. –