2016-05-20 3 views
1

Есть ли у кого-нибудь идея, как сделать ступенчатую регрессию с Tweedie в R?mgcv: Как сделать ступенчатую регрессию с моделью ответа Tweedie?

Я нашел пакет mgcv, который, по-видимому, рассматривает параметр мощности Tweedie как еще один оцениваемый параметр. Кажется, это улучшает необходимость использования tweedie.profile для оценки мощности за пределами glm, поэтому представляется целесообразным использовать автоматическую ступенчатую функцию для регрессии. Но мне не удалось выяснить, предлагает ли пакет пошаговую функцию. В руководстве по упаковке есть что сказать.

я заблудился в разговоре о сглаживает:

Там нет step.gam в пакете mgcv.
Чтобы полностью автоматизировать выбор модели, в пакете реализованы две технологии гладкой модификации , которые могут использоваться для уменьшения сглаживания до нуля в качестве части выбора гладкости.

Примите во внимание вашу помощь. Благодарю.

+0

Привет Zheyuan. Да, очень полезно, спасибо большое. Мне нужно сесть и понять, как это сглаживание работает. Быстрый вопрос: имеет ли функция Tweedie mgcv функцию Select = TRUE и Method = RELM? Еще раз спасибо –

+0

Я вижу, что вы можете использовать family = Tweedie в игре, или вы можете использовать функцию Tweedie. Пока не уверены в их различии. Вот почему я спросил, может ли выбор и метод использоваться в Tweedie. Но то, что вы сказали, имеет смысл, спасибо. –

+0

Ах, это передано семье, вы получили, большое спасибо. –

ответ

4

Ваш вопрос не относится к семейству «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) 

shrinkage

Обратите внимание, что, то 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 
+0

Zheyuan. Хороший ответ. Могу ли я просить о некоторых мыслях, пожалуйста: в вашем примере коэффициенты x3, x4 (и возможных x5 ??) были уменьшены до нуля, так что это похоже на выбор переменной ?. Не могли бы вы обновить модель без них? (как в моем случае, если многие переменные в модели сокращаются до нуля, то представление всех этих нулевых коэффициентов в модели будет, я думаю, проблематично с рецензентом. – user2957945