首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mgcv:如何用Tweedie响应模型进行逐步回归?

mgcv:如何用Tweedie响应模型进行逐步回归?
EN

Stack Overflow用户
提问于 2016-05-20 16:17:33
回答 1查看 3K关注 0票数 2

有没有人知道如何对R中的Tweedie进行逐步回归?

我找到了mgcv包,它显然将Tweedie的功率参数作为另一个待估计的参数来处理。这似乎改进了必须使用tweedie.profile来估计glm之外的功率,因此使用自动逐步函数进行回归似乎是令人鼓舞的。但是我还没有弄清楚这个包是否也提供了一个逐步的功能。包装手册有这样的说法。

我在关于冰沙的谈话中迷失了方向:

在mgcv包中没有step.gam。 为了便于全自动的模型选择,该软件包实现了两种平滑修改技术,可用于将平滑缩小到零,作为平滑选择的一部分。

我很感谢你的帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-20 17:39:03

您的问题并不是专门针对"Tweedie“家族的,它是mgcv 在模型选择中的一个通用特性。

mgcv不使用step.gam进行模型选择。我认为您的困惑来自于另一个包gam,它将使用step.gam顺序添加/删除一个术语并报告AIC。当您使用?step.gam in mgcv时,它会将您推荐到?gam.selection?step.gam是故意留在那里的,以防人们搜索它。但是所有的细节都是在?gam.selection中提供的。

没有必要在step.gam mgcv**.中做将模型估计和模型选择集成到** mgcv**.**中,当平滑参数达到无穷大时,其二阶导数被罚为零,留下一个简单的线性项。例如,如果我们指定的模型如下:

代码语言:javascript
复制
y ~ s(x1, bs = 'cr') + s(x2, bs = 'cr')

虽然s(x2)是一个虚假的模型术语,不应该包含在模型中,但是mgcv:::gam/bam在估计后会将s(x2)缩小到x2,从而产生如下模型:

代码语言:javascript
复制
y ~ s(x1) + x2

这意味着,当您使用plot.gam()检查每个模型项的估计光滑函数时,s(x1)是一条曲线,而s(x2)是一条直线。

现在,这并不完全令人满意。对于一个完整的、成功的模型选择,我们也希望删除x2,即将s(x2)缩小到0,以得到一个臭名昭著的模型:

代码语言:javascript
复制
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也允许您在s()中保持bs = 'cr'bs = 'tp'不变,而将select = TRUE放在gam()bam()中。select = TRUE是一种更通用的处理方法,因为收缩平滑器目前只有csts类,而select = TRUE适用于所有类型的平滑规范。他们实际上也是这样做的,把0特征值增加到0.1。

下面的示例取自?gam.selection下的示例。注意select = TRUE如何将几个术语缩小到0,从而提供了一个信息丰富的模型选择。

代码语言:javascript
复制
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 in summary.gam()也为这样的选择提供了证据:

代码语言:javascript
复制
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
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37351338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档