2016-12-27 107 views
1

'范围'部分的说明我正尝试使用纯素食包中的ordiR2step函数。我能得到类似的ordistep功能工作正常使用:ordiR2step

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)'scope'实际上做了什么?

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

您引用的纯素食帮助示例将建议使用'ordiR2step(mrday0,scope = mrday1)'。也就是说,你从一个空模型“mrday0”开始,朝着'mrday1'工作,作为'范围'。 –

回答

2

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

该公式必须与您在模型中使用的公式相似。 ordiR2step似乎是一种功能,它也会从拟合排序模型中提取公式。

你的例子是不可重现的(公式中的四个点会给出语法错误)。但是,在我看来,myrday1是您的最大型号。所以它应该被用作scope。您的myrday0只包含常数(~ 1),它可以用作开始的模型。它可以用作函数的第一个参数。下面应该工作:

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

在你自己的例子,你扭转这些车型的订单,并给出了最大的模型作为第一个参数(=初始模型)。这是行不通的,因为ordiR2step不能去backwards(另一种替代"both"意味着向前迈进了一步,它会尝试退后一步,但它不能从最大模型迈出第一步)。

+0

梦幻般的解释,谢谢@Jari Oksanen!我完全误解了这个功能,认为它需要一个更低和更高的界限。解决了我的问题。 – Jesse001

+0

作为作者(@ Jari Oksanen)看到函数的响应,我想冒险跟进问题:可以适合的术语的最大数量是多少?使用你的答案上面的函数运行良好的预先代码,但是当我试图让我的最大模型像我想要的那样大时,我会得到“上方的范围不能更合适(太多的术语?)” – Jesse001

+1

您可以用完自由程度。通常,这表现为无法获得调整后的R范围的“范围”在大多数情况下,它有助于设置参数“R2scope = FALSE”,并且一切正常(除了超出范围的调整R平方的标准'不会被使用)。 –