mgcv:如何使用 Tweedie 响应模型进行逐步回归?
mgcv: How to do stepwise regression with a Tweedie response model?
有谁知道如何在 R 中使用 Tweedie 进行逐步回归?
我找到了 mgcv
包,它显然将 Tweedie 的功率参数视为另一个要估计的参数。这似乎改进了必须使用 tweedie.profile
来估计 glm
之外的功率,因此使用自动逐步函数进行回归似乎令人鼓舞。但是我一直无法弄清楚该软件包是否还提供逐步功能。包装手册是这样说的。
我在谈论平滑时迷失了方向:
There is no step.gam in package mgcv.
To facilitate fully automatic model selection the package implements two smooth modification techniques
which can be used to allow smooths to be shrunk to zero as part of smoothness selection.
非常感谢您的帮助。谢谢
您的问题并非针对 "Tweedie" 家庭;这是模型选择中的一般 mgcv
特征。
mgcv
不使用 step.gam
进行模型选择。我认为您的困惑来自另一个包 gam
,它将使用 step.gam
按顺序 add/drop 一个术语并报告 AIC。当您在 mgcv
中进入 ?step.gam
时,它会将您指向 ?gam.selection
。 ?step.gam
是故意留在那里,以防人们搜索它。但是 ?gam.selection
.
中提供了所有详细信息
mgcv
中不需要做step.gam
。模型估计和模型选择集成在 mgcv
. 对于惩罚 regression/smoothing 样条,当平滑参数趋于无穷大(非常大)时,其二阶导数被惩罚为零,留下简单的线性项。例如,如果我们指定这样的模型:
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)
但这并不难实现。我们可以使用shrinkage smoothclassbs = 'ts'
(shrinkage thin plate regression spline,相对于普通的tp
)或者bs = cs'
(shrinkage cubic regression spline,相对于普通的'cr'),并且 mgcv:::gam/bam
应该能够将 s(x2)
缩小到 0。这背后的数学原理是 mgcv
将修改线性项的特征值(即, null space) 从 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
是一种更通用的处理方法,因为收缩平滑目前只有 class 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)
请注意,summary.gam()
中的p-values
也为这种选择提供了证据:
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
有谁知道如何在 R 中使用 Tweedie 进行逐步回归?
我找到了 mgcv
包,它显然将 Tweedie 的功率参数视为另一个要估计的参数。这似乎改进了必须使用 tweedie.profile
来估计 glm
之外的功率,因此使用自动逐步函数进行回归似乎令人鼓舞。但是我一直无法弄清楚该软件包是否还提供逐步功能。包装手册是这样说的。
我在谈论平滑时迷失了方向:
There is no step.gam in package mgcv.
To facilitate fully automatic model selection the package implements two smooth modification techniques which can be used to allow smooths to be shrunk to zero as part of smoothness selection.
非常感谢您的帮助。谢谢
您的问题并非针对 "Tweedie" 家庭;这是模型选择中的一般 mgcv
特征。
mgcv
不使用 step.gam
进行模型选择。我认为您的困惑来自另一个包 gam
,它将使用 step.gam
按顺序 add/drop 一个术语并报告 AIC。当您在 mgcv
中进入 ?step.gam
时,它会将您指向 ?gam.selection
。 ?step.gam
是故意留在那里,以防人们搜索它。但是 ?gam.selection
.
mgcv
中不需要做step.gam
。模型估计和模型选择集成在 mgcv
. 对于惩罚 regression/smoothing 样条,当平滑参数趋于无穷大(非常大)时,其二阶导数被惩罚为零,留下简单的线性项。例如,如果我们指定这样的模型:
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)
但这并不难实现。我们可以使用shrinkage smoothclassbs = 'ts'
(shrinkage thin plate regression spline,相对于普通的tp
)或者bs = cs'
(shrinkage cubic regression spline,相对于普通的'cr'),并且 mgcv:::gam/bam
应该能够将 s(x2)
缩小到 0。这背后的数学原理是 mgcv
将修改线性项的特征值(即, null space) 从 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
是一种更通用的处理方法,因为收缩平滑目前只有 class 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)
请注意,summary.gam()
中的p-values
也为这种选择提供了证据:
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