Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R mgcv:如何使用Tweedie反应模型进行逐步回归?_R_Regression_Gam_Mgcv_Tweedie - Fatal编程技术网

R mgcv:如何使用Tweedie反应模型进行逐步回归?

R mgcv:如何使用Tweedie反应模型进行逐步回归?,r,regression,gam,mgcv,tweedie,R,Regression,Gam,Mgcv,Tweedie,有人知道如何用R中的Tweedie进行逐步回归吗 我找到了mgcv包,它显然将Tweedie的功率参数视为另一个需要估计的参数。这似乎改善了必须使用tweedie.profile来估计glm之外的功率,因此使用自动逐步函数进行回归似乎是令人鼓舞的。但是我还没有弄清楚这个包是否也提供了一个逐步的功能。包装手册中有这样一句话 我在谈论平滑时迷失了方向: 包mgcv中没有step.gam。 为了便于全自动模型选择,该软件包实现了两种平滑修改技术 作为平滑度选择的一部分,可用于将平滑度收缩为零 libr

有人知道如何用R中的Tweedie进行逐步回归吗

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

我在谈论平滑时迷失了方向:

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

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)

谢谢你的帮助。谢谢。

你的问题不是针对“Tweedie”家庭的;它是车型选择中的一项通用功能。mgcv。

mgcv
不使用
step.gam
进行型号选择。我认为您的困惑来自另一个包
gam
,它将使用
step.gam
顺序添加/删除术语并报告AIC。当您在
mgcv
中进入
?步骤gam
时,它会将您指向
?gam.选择
<代码>?step.gam故意放在那里,以防人们搜索它。但是所有的细节都在游戏选择中提供

无需在
mgcv
中执行
step.gam
。模型估计和模型选择集成在
mgcv
中,对于惩罚回归/平滑样条曲线,当平滑参数变为无穷大(非常大)时,其二阶导数被惩罚为零,留下一个简单的线性项。例如,如果我们指定如下模型:

y ~ s(x1, bs = 'cr') + s(x2, bs = 'cr')
y ~ s(x1) + x2
虽然
s(x2)
是一个虚假的模型术语,不应包含在模型中,但是
mgcv:::gam/bam
在估计后将
s(x2)
收缩到
x2
,从而产生如下模型:

y ~ s(x1, bs = 'cr') + s(x2, bs = 'cr')
y ~ s(x1) + x2
这意味着,当使用
plot.gam()
检查每个模型项的估计平滑函数时,
s(x1)
是一条曲线,而
s(x2)
是一条直线

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

y ~ s(x1)
但这并不难实现。我们可以使用收缩平滑类(收缩薄板回归样条线,与普通的
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
是一种更为普遍的处理方法,因为收缩平滑目前只有类
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)

嗨,哲远。是的,非常有帮助,非常感谢。我需要坐下来了解这种平滑是如何工作的。快速提问:mgcv的Tweedie函数是否也具有Select=TRUE和Method=RELM功能?再次感谢您,您可以在gam中使用family=Tweedie,也可以使用Tweedie函数。还不确定他们之间的区别。这就是为什么我问SelectandMethod是否也可以在Tweedie中使用。但是你说的有道理,谢谢。啊,这是传给家人的,明白了,非常感谢。哲远。回答得好。请允许我问一些想法:在您的示例中,x3、x4(以及可能的x5??)的系数已向零收缩,因此这类似于变量选择?。没有这些,你能重新安装这个模型吗?(在我的例子中,如果一个模型中的许多变量收缩到零,那么在一个模型中呈现所有这些零系数,我认为对于一个评审员来说是有问题的。