r语言 - 尝试该步骤时出现"invalid `method'"错误。甘函数



我有一个带有许多协变量的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
)

步骤。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")

我希望得到最小的模型,但它给了我以下错误:

gam中的错误(公式=D~x+Cov1+Cov2+Cov3,:无效的"方法":REML

我不明白为什么会发生这种情况!我尝试了不同的方法(GACV.Cp,ML),但我得到了相同类型的错误(无效方法:GACV.Cp等)为什么会发生这种情况?是因为它是由dsm函数生成的gam模型吗?更重要的是,如何自动最小化模型??

(当我在dsm函数中使用engine='glm'而不是'gam'时),我尝试使用stats::step函数来找到它工作的最小模型,但结果似乎有点可疑。。。所以我想使用gam引擎)

gam包不适合使用REML或您声明的其他选项的模型。这些是mgcv包中gam()函数的选项。

gam::gam()method参数唯一允许的选项是:

  1. "glm.fit",这是默认值,以及
  2. "model.frame",它并没有真正做任何事情,因为它指示函数只吐出由公式产生的模型帧

区分这两个都提供gam()功能的包非常重要。它们是估计GAM的非常不同的方法。

当您使用dsm()时,您将使用mgcv::gam()而不是gam::gam()进行拟合,在这种情况下,您无法将gam::step.gam()函数应用于模型。

我相信dsm()的作者建议您对mgcv::gam()使用select = TRUE参数,您可以在使用dsm()时提供该参数,该参数将在gam()上传递。这将为模型中的平滑项添加额外的惩罚,以便它们可以从模型中缩小。

相关内容

最新更新