||
昨天在中科院南京与湖泊所做报告。有个人问了一个很好的问题:如何判断典范排序中解释变量的显著性?这个是个非常好的问题,但又是一个大家很容易犯错误的问题。很多人可能直接用anova(rda结果,by="term")获得的每个变量的p值来作为解释变量的显著性。殊不知如果变量之间存在共线性的话,这个anova得到p值是跟变量在原始数据里面的位置是有关系的。如果更改变量的顺序,结果可能就不一样了。如下图,图1,当alt是第一列,slo是第二列时候,p值分别是0.001和0.64,如果把alt和slo掉个位置(图2),slo和alt的p值立马变为0.001和0.002,为什么会这样呢?因为anova(,by="term")是按照顺序方差来的计算的,其实输出界面已经明确提示 “Terms added sequentially", 也就是顺序方差,如果变量之间存在共线性,那么这种运算规则下,排在前面的变量占有优势,也就是占便宜了,后面的变量自然就吃亏了,而我们一般在整理组织数据时,对于变量的顺序往往是随意的,所有就造成结果的不可靠。另外,变量之间共线性在我们生态学数据中是普遍存在,那到底怎么才能获得变量的显著性?
其实,这个问题本算就是伪命题,因为如果认为某个解释变量是显著的,那应该解释为这个解释变量对于群落的组成具有显著性的影响。但是,实际上典范分析过程是每个物种都是一个独立的回归模型,也就是多少个物种,就有多少个回归,也就是可能某个解释变量对于一些种的分别有显著的影响(可以从普通的回归的系数的显著性去判断),而可能对于另外一些物种的分布是影响是不显著的。那对有些物种显著,对有些物种不显著,那对于整个群落的物种到底是显著还是不显著,这个真是无法回答问题。
但是,大部分科研人员,可能不想听我上面的解释,一定要得到一个显著还是不显著的p值。好吧,那就勉强用rdacca.hp包permu.hp或是vegan包里面envfit函数(选前两轴)获得p值吧。这两个函数得到结果虽然也不靠谱,因为这两个函数都对位置不敏感,但勉强能回答解释变量对于整个群落的是否是显著的这个问题,起码要比anova靠谱一点,但是我还是要苦口婆心跟大家说,permu.hp或是envfit函数得到结果如果符合你的预期,很好,写在文章里面没问题。如果不符合你的期望,没关系,不要沮丧,这个不显著性说明不了什么问题。
图1,当alt是第一列,slo是第二列时候,p值分别是0.001和0.64,下图如果把alt和slo掉个位置,slo和alt的p值立马变为0.001和0.002。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 16:51
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社