ordiR2step 的 'scope' 部分的解释

Explanation of the 'scope' part of ordiR2step

我正在尝试使用 vegan 包中的 ordiR2step 函数。我能够使类似的 ordistep 函数正常工作:

mrday1<-rda(y1bio~y1local + y1region + y1comp + (y1local * y1region)....)
Aiy1<-ordistep(mrday1,perm.max=200)
Aiy1$anova

但我不认为我完全理解 'scope' 部分是如何工作的,所以我既不相信 ordistep 能给我我正在寻找的东西,也不能让 ordiR2step 工作(它需要范围).

在文档中它说范围:

"Defines the range of models examined in the stepwise search. This should be either a single formula, or a list containing components upper and lower, both formulae."

之后没有使用它的例子
data(mite) 
data(mite.env) 
mite.hel = decostand(mite, "hel") 
mod0 <- rda(mite.hel ~ 1, mite.env)  # Model with intercept only mod1 <-
rda(mite.hel ~ ., mite.env)  # Model with all explanatory variables
step.res<-ordiR2step(mod0, mod1, perm.max = 200) 
step.res$anova  # Summary
#Note: this is a direct quote from the Vegan documentation

我对 'scope' 的功能是什么感到困惑,因此如何最好地为它制作合适的公式。 我试过了:

mrday0<-yda(y1bio~1,newAbioy1)
 mrday1<-rda(y1bio~y1local + y1region + y1comp + (y1local * y1region)....)
Aiy1<-ordiR2step(mrday1,scope=mrday0, perm.max=200)
Aiy1$anova

但在不完全理解范围边界函数的作用的情况下,我无法开始评估结果。 问题:

1) 'scope'实际上是做什么的?

2) 找什么样的公式?

更新

我使用的完整功能代码是:

mrdayy02<-rda(y2bio ~ 1, datay2)
mrday2<-rda(y2bio~y2l + y2r 
         + y2c + y2lh + y2d
         + (y2l * y2r) + (y2l * y2c) + (y2l * y2lh) + (y2l * y2d)
         +               (y2r * y2c) + (y2r * y2lh) + (y2r * y2d)
         )
Aiy2<-ordiR2step(mrdayy02,scope=mrday2,direction="forward",R2scope= FALSE, perm.max=200)
Aiy2$anova

par(bg="transparent",new=FALSE)
plot(Aiy2,type="n",bty="n",main="RDAy2",
     xlab="RDA1",
     ylab="RDA2",
     col.main="black",col.lab="black", col.axis="white",
     xaxt="n",yaxt="n")
#abline(h=0,v=0,col="black",lwd=1)
points(Aiy2,display="species",col="gray",pch=20)
#text(rday2,display="species",col="gray")
points(Aiy2,display="cn",col="black",lwd=2)
text(Aiy2,display="cn",col="black",cex=0.5)

ordiR2step 仅适用于前向选择(已记录)。它以作为第一个参数给出的模型开始。第二个参数 scope 给出了试图前进的模型: scope 必须给出最大可能模型(最大模型)的公式。我认为这回答了你的第一个问题。

公式必须与您在模型中使用的公式相似。 ordiR2step好像是种函数,它也会从拟合的排序模型中提取公式。

您的示例无法重现(公式中的四个点会导致语法错误)。但是,在我看来 myrday1 是您的最大模型。所以它应该用作scope。您的 myrday0 仅包含常量 (~ 1),它可以用作开始的模型。它可以用作函数中的第一个参数。以下应该有效:

ordiR2step(myrday0, myrday1)
ordiR2step(myrday0, scope = formula(myrday1)) # same, but more explicit

在您自己的示例中,您颠倒了这些模型的顺序,并将最大模型作为第一个参数(= 初始模型)。这行不通,因为ordiR2step不能走backwards(另一种选择"both"意味着向前迈出一步后,它会尝试走一个退一步,但不能从最大模型迈出第一步)。