mgcv: Как сделать пошаговую регрессию с помощью модели ответа Твиди?

Есть ли у кого-нибудь идеи, как сделать пошаговую регрессию с Tweedie в R?

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

Заблудился в разговоре о смачивателях:

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

Буду признателен за вашу помощь. Спасибо.


person Alp Can    schedule 20.05.2016    source источник
comment
Привет, Чжэюань. Да, очень помогли, большое спасибо. Мне нужно сесть и понять, как работает это сглаживание. Быстрый вопрос: функция Tweedie в mgcv также включает Select = TRUE и Method = RELM? Еще раз спасибо   -  person Alp Can    schedule 20.05.2016
comment
Я вижу, что вы можете использовать либо family = Tweedie в игре, либо функцию Tweedie. Пока не уверен в их различии. Вот почему я спросил, можно ли использовать select и method и в Tweedie. Но то, что вы сказали, имеет смысл, спасибо.   -  person Alp Can    schedule 21.05.2016
comment
Ах, это передано семье, понял, большое спасибо.   -  person Alp Can    schedule 21.05.2016


Ответы (1)


Ваш вопрос не относится к семейству «Твиди»; это общая 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)

усадка

Обратите внимание, что 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
comment
Чжэюань. Хороший ответ. Могу я спросить, пожалуйста, некоторые мысли: в вашем примере коэффициенты x3, x4 (и, возможно, x5 ??) были уменьшены до нуля, так что это похоже на выбор переменной ?. Вы бы переоборудовали модель без них? (как в моем случае, если многие переменные в модели уменьшены до нуля, то представление всех этих нулевых коэффициентов в модели, я думаю, будет проблематичным для рецензента. - person user2957945; 11.07.2016