我正在尝试使用纯素包中的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)
答案 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"
意味着在向前迈出一步之后,它会尝试退一步,但它不能从最大模型中迈出第一步。