ordiR2step的“范围”部分的说明

时间:2016-12-27 20:55:39

标签: r vegan

我正在尝试使用纯素包中的ordiR2step函数。我可以通过以下方式使类似的ordistep函数正常工作:

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

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

在文档中,它说范围:

  

“定义逐步搜索中检查的模型范围   应该是单个公式,或包含组件的列表   上下两个公式。“

除了

之外没有使用它的例子
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

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

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

但是如果没有完全理解范围界定功能的作用,我就无法开始评估结果。 的的问题:

1)“范围”实际上做了什么?

2)它在寻找什么样的公式?

UPDATE

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

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)

1 个答案:

答案 0 :(得分:2)

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

公式必须与模型中使用的公式类似。 ordiR2step似乎是一种类型的功能,它还将从拟合的排序模型中提取公式。

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

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

在您自己的示例中,您颠倒了这些模型的顺序,并将最大模型作为第一个参数(=初始模型)。这不起作用,因为ordiR2step无法转到backwards(另一个替代"both"意味着向前迈出一步之后,它会尝试退一步,但它不能从最大模型中迈出第一步。