"invalid `method'" 尝试 step.Gam 函数时出错
"invalid `method'" error when I try the step.Gam function
我有一个包含许多协变量的 gam
函数,我想简化它(找到最小模型)
我使用 dsm
函数来模拟跨线横切段的物种密度作为协变量的函数。而且效果很好!
但它是协变量太多的最大模型,我想自动减少它们的数量。所以我尝试使用 gam::step.Gam
函数。 (我还使用了 gam.scope
函数来确保我做的每件事都是正确的)。
DSM 代码:
GamModel = dsm(
ddf.obj=PreparedDdf,
formula = D ~ x + y + Cov1 + Cov2 +...+ Covn factor1+ factor2+...+factorn,
family=gaussian(link='identity'),
group=FALSE,
engine='gam',
convert.units=1,
segment.data=segment.df,
observation.data=observation.df
)
step.Gam代码:
GamScope=gam.scope(segment.df[,c(5:6,11:16)], response=1, smoother="s", arg=NULL, form=TRUE)
MinModel = step.Gam(GamModel, GamScope, trace=TRUE, direction="backward")
我希望获得最小模型,但它给我以下错误:
Error in gam(formula = D ~ x + Cov1 + Cov2 + Cov3, : invalid `method': REML
而且我不明白为什么会这样!我尝试了不同的方法(GACV.Cp、ML)但我得到了同样的错误(无效的方法:GACV.Cp 等)
为什么会这样?是不是因为是dsm函数生成的gam模型?
更重要的是,如何自动最小化模型??
(当我在 dsm
函数中使用 engine='glm'
而不是 'gam'
时)我尝试使用 stats::step
函数来找到它工作的最小模型,但是结果似乎有点乱...所以我想使用gam引擎)
gam 包不适合使用 REML 或您声明的其他选项的模型。这些是 mgcv 包中 gam()
函数的选项。
gam::gam()
中 method
参数唯一允许的选项是:
"glm.fit"
,这是默认值,
"model.frame"
,它实际上并没有做任何事情,因为它指示函数只是吐出公式产生的模型框架。
区分这两个都提供 gam()
功能的包非常重要。它们是非常不同的 GAM 估计方法。
当您使用 dsm()
时,您将使用 mgcv::gam()
而不是 gam::gam()
进行拟合,在这种情况下,您无法将 gam::step.gam()
函数应用于模型。
我相信 dsm()
的作者建议您使用 mgcv::gam()
的 select = TRUE
参数,您可以在使用 dsm()
时提供该参数并将通过在 gam()
上。这将为模型中的平滑项添加额外的惩罚,以便它们可以从模型中缩小。
我有一个包含许多协变量的 gam
函数,我想简化它(找到最小模型)
我使用 dsm
函数来模拟跨线横切段的物种密度作为协变量的函数。而且效果很好!
但它是协变量太多的最大模型,我想自动减少它们的数量。所以我尝试使用 gam::step.Gam
函数。 (我还使用了 gam.scope
函数来确保我做的每件事都是正确的)。
DSM 代码:
GamModel = dsm(
ddf.obj=PreparedDdf,
formula = D ~ x + y + Cov1 + Cov2 +...+ Covn factor1+ factor2+...+factorn,
family=gaussian(link='identity'),
group=FALSE,
engine='gam',
convert.units=1,
segment.data=segment.df,
observation.data=observation.df
)
step.Gam代码:
GamScope=gam.scope(segment.df[,c(5:6,11:16)], response=1, smoother="s", arg=NULL, form=TRUE)
MinModel = step.Gam(GamModel, GamScope, trace=TRUE, direction="backward")
我希望获得最小模型,但它给我以下错误:
Error in gam(formula = D ~ x + Cov1 + Cov2 + Cov3, : invalid `method': REML
而且我不明白为什么会这样!我尝试了不同的方法(GACV.Cp、ML)但我得到了同样的错误(无效的方法:GACV.Cp 等) 为什么会这样?是不是因为是dsm函数生成的gam模型? 更重要的是,如何自动最小化模型??
(当我在 dsm
函数中使用 engine='glm'
而不是 'gam'
时)我尝试使用 stats::step
函数来找到它工作的最小模型,但是结果似乎有点乱...所以我想使用gam引擎)
gam 包不适合使用 REML 或您声明的其他选项的模型。这些是 mgcv 包中 gam()
函数的选项。
gam::gam()
中 method
参数唯一允许的选项是:
"glm.fit"
,这是默认值,"model.frame"
,它实际上并没有做任何事情,因为它指示函数只是吐出公式产生的模型框架。
区分这两个都提供 gam()
功能的包非常重要。它们是非常不同的 GAM 估计方法。
当您使用 dsm()
时,您将使用 mgcv::gam()
而不是 gam::gam()
进行拟合,在这种情况下,您无法将 gam::step.gam()
函数应用于模型。
我相信 dsm()
的作者建议您使用 mgcv::gam()
的 select = TRUE
参数,您可以在使用 dsm()
时提供该参数并将通过在 gam()
上。这将为模型中的平滑项添加额外的惩罚,以便它们可以从模型中缩小。