加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R软件包vegan教程 2.1非度量多维度标度变换

(2012-11-26 17:03:10)
标签:

r软件

vegan软件包

群落排序

生态学

2.1 非度量多维度标度变换(Non-metric Multidimensional scaling)

 

可以用vegan里的 monoMDS 函数执行非度量多维标度变换,它需要把差异(dissimilarities)作为输入量。差异用vegan里的vegdist函数求取。默认值是Bray-Curtis指数,现在常见的是Steinhaus指数,或者芬兰所称的Sørensen指数。基本步骤(依次输入的命令)如下:

> library(permute)

> library(vegan)

This is vegan 2.0-5

//系偶今天(2012-11-20)下载的版本

> data(varespec)

> vare.dis <- vegdist(varespec)

> vare.mds0 <- monoMDS(vare.dis)

> stressplot(vare.mds0, vare.dis)

 

    默认的是找到两个维度和使用度量变换(cmdscale)作为初始解。解由迭代法求得,可以从迹的信息中看到(可以禁止设置trace=F)。

   monoMDS 函数得到的结果有一长串:nobj, nfix, ndim, nobj, nfix, ndim, ndis, ngrp, diss, iidx, jidx, xinit, istart, isform, ities, iregn, iscal, maxits, sratmx, strmin, sfgrmn, dist, dhat, points, stress, grstress, iters, icause, call, model, distmethod, distcall, 这些结果用于configuration和Stress。Stress (S)是衡量拟合优度的一个统计量,是关于差异和序列距离 的单调非线性函数,表达式如下:

 

http://s2/bmiddle/b5c8908cgcf625dcaec81&6902.1非度量多维度标度变换" TITLE="R软件包vegan教程 2.1非度量多维度标度变换" />

    NMDS图把群落非线性的差异投影到序列空间上进行观察,它能处理任意形状非线性的物种响应。可以使用MASS程序包里的Shepard函数查看图像,或者使用vegan里的stressplot函数(画的图如下)。


http://s2/mw690/b5c8908cgcf73e09e7fc1&6902.1非度量多维度标度变换" TITLE="R软件包vegan教程 2.1非度量多维度标度变换" />

   stressplot 函数画出的是Shepard图,横坐标是群落差异,纵坐标是排序距离(ordination distances)。表现为单调的阶梯状曲线(图中的红线)。应注意,图中给出了两个与拟合优度有关的统计量。一个是与stress有关的R2=1-S2(Non-metric fit,R2=0.963)。另一个fit-based R2是和的相关系数,或者是阶梯状曲线与点的相关系数。这两个相关系数都以Shepard图的残差为基础,但他们的零模型(null model)不同。线性拟合的零模型中所有的序列距离都相等,拟合得到一条“胖”水平直线。看起来是可取的,但是N个点的零模型需要N-1维数据,在几何上是不可能在序列空间中实现这个零模型的。基础stress使用的零模型中所有的观测放在同一个点,这在几何上是可能的。最终的警示语:你可能看到过有人使用和的相关系数。这是危险的,是一种误导。因为NMDS是一种非线性方法,根据该准则,一种改良的、具有更多的非线性关系会显示错误。

    使用vegan中的函数scoresordiplot处理NMDS的结果。输入命令 ordiplot(vare.mds0, type = "t"),得到下图:

http://s1/mw690/b5c8908cgcf73f32b9680&6902.1非度量多维度标度变换" TITLE="R软件包vegan教程 2.1非度量多维度标度变换" />

    上图显示出的只有site scores,因为差异信息里不包括物种信息。

   

    由于排序和原始差异是非线性相关,因此在NMDS中迭代搜索异常困难,局部最优比全局最优更容易。因此推荐使用几个随机起始值(random starts),并且选择stress值最小的近似解。这很繁琐,但vegan里的函数metaMDS可轻易处理之。tracing输出结果很长,我们可以压缩之,即令trace=0(处理的时间可能很长)。输入的命令结果(Call后面的东西)如下图所示:

 

http://s15/mw690/b5c8908cgcf740c1f9f4e&6902.1非度量多维度标度变换" TITLE="R软件包vegan教程 2.1非度量多维度标度变换" />

    根据上述结果制图,输入命令plot(vare.mds, type=t)),图在下面:

 

http://s14/mw690/b5c8908cgcf7416027fdd&6902.1非度量多维度标度变换" TITLE="R软件包vegan教程 2.1非度量多维度标度变换" />

 

 

    我们没有单独计算差异,但是我们给出了原始数据矩阵作为输入。结果比起初复杂的多,在 monoMDS 给出的结果中增加了相当多的东西,有nobj, nfix, ndim, ndis, ngrp, diss, iidx, jidx, xinit, istart, isform, ities, iregn, iscal, maxits, sratmx, strmin, sfgrmn, dist, dhat, points, stress, grstress, iters, icause, call,model, distmethod, distcall, data, distance, converged, tries,engine, species.(前面已经见过了),这个函数里包含了一大堆指令,都做哪些工作呢?答案如下:

(1)数据范围相当大,以至于做取方根变换,然后进行Wisconsin双重标准化(Wisconsin double standardization),或者按最大值把物种分类,并通过标准化转变成总和相等。通常使用这两种标准化来改进序列,但在最初的分析中我们并不关心他。

(2)使用Bray-Curtis差异方程。

(3)使用几个随机起始量(random starts)来运行monoMDS,运行若干次或者找到两个相似且stress最小的组合(configurations)后停止运行。任何时候,它都会返回最优解。

(4)对解进行旋转,目的是令site scores方差最大的处在第一轴上。

(5)标定(Scaled)解,从而使一个单位相当于从复制的类似物中把群落相似性均分(Function scaled the solution so that one unit corresponds to halving of community similarity from the replicate similarity.)。

(6)找出物种得分(species scores)作为样地得分(site scores)的平均权重,但要把它们扩大,使物种和样地得分的方向相等。在display命令里令shrink=TRUE命令可以恢复该过程。

当然,在系统帮助文档里有metaMDS的详解。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有