概述
非度量多維尺度分析(NMDS 分析)是一種將多維空間的研究對(duì)象(樣本或變量)簡(jiǎn)化到低維空間進(jìn)行定位、分析和歸類,同時(shí)又保留對(duì)象間原始關(guān)系的數(shù)據(jù)分析方法,能夠反映對(duì)象間的順序關(guān)系。與PCoA類似,NMDS可以基于任何類型距離矩陣對(duì)對(duì)象(樣方)進(jìn)行排序;但也有不同之處,NMDS不在基于距離矩陣數(shù)值,而是根據(jù)排位順序進(jìn)行計(jì)算。對(duì)于存在距離缺失的數(shù)據(jù)而言有優(yōu)勢(shì),只要想辦法確定對(duì)象間的位置關(guān)系,即可進(jìn)行NMDS分析。由于NMDS不是特征根排序技術(shù),也不再讓排序軸載更多的變差目的;因此NMDS排序圖可以任意旋轉(zhuǎn)、中心化和倒置(賴江山, 數(shù)量生態(tài)學(xué))。
NMDS計(jì)算過(guò)程:
預(yù)先設(shè)定排序軸的數(shù)量m;
在m維空間內(nèi)構(gòu)建對(duì)象的初始結(jié)構(gòu),初始結(jié)構(gòu)是調(diào)整對(duì)象之間位置關(guān)系的起點(diǎn);
在m維空間內(nèi),用一個(gè)迭代程序不斷調(diào)整對(duì)象位置,目標(biāo)是不斷最小化應(yīng)力函數(shù)(Stress function,其值被轉(zhuǎn)化為0~1間的數(shù)值,可以檢驗(yàn) NMDS 分析結(jié)果的優(yōu)劣。通常認(rèn)為 stress<0.2 時(shí)可用 NMDS 的二維點(diǎn)圖表示,其圖形有一定的解釋意義;當(dāng) stress<0.1 時(shí),可認(rèn)為是一個(gè)好的排序;當(dāng) stress<0.05 時(shí),則具有很好的代表性)不斷調(diào)整對(duì)象位置,直至應(yīng)力函數(shù)值不再減少,或已達(dá)到預(yù)定的值;
大部分NMDS會(huì)根據(jù)PCA結(jié)果旋轉(zhuǎn)最終的排序圖,使結(jié)果更容易解讀。
基于vegan包的metaMDS()函數(shù)的NMDS分析
setwd("D:/Rdata") #設(shè)置路徑
#install.packages("vegan") #安裝vegan包
#加載vegan包
library(vegan)
spe <- read.csv("nmds-spec.csv")#讀取物種數(shù)據(jù)#
spe
spe.h <- decostand(spe,"hellinger")#數(shù)據(jù)標(biāo)準(zhǔn)化#
head(spe.h)


#NMDS分析
spe.h.nmds <- metaMDS(spe.h,distance="bray")#NMDS分析-基于Bray-Curtis距離
spe.h.nmds
spe.h.nmds$stress#查看stress值
stressplot(spe.h.nmds, main = "Shepard 圖")
map<- scores(spe.h.nmds)#提取前兩軸坐標(biāo)/spe.h.nmds$points#查看前兩軸物種坐標(biāo)
map
#導(dǎo)出前兩軸坐標(biāo)
write.csv(map,"points.csv")



Shepard 圖:能夠比較NMDS中對(duì)象間距離與原始距離測(cè)度矩陣中的值或者通過(guò)二者間進(jìn)行線性(Linear fit)或非線性(Non-metric fit)擬合的R^2 評(píng)估,擬合R^2 越大越好/兩個(gè)R^2 值越一致越好。
結(jié)果優(yōu)劣評(píng)估
1、Shepard圖的R^2 :擬合R^2 越大越好/兩個(gè)R^2 值越一致越好;
2、Stress值:Stress<0.2(有一定可靠性);Stress<0.05(結(jié)果較好);Stress<0.02(結(jié)果很好);Stress<0.01(結(jié)果極好)。
基于ggplot2包繪制NMDS圖
#ggplot2繪圖
library(ggplot2)
#我們將nmds_dis_site數(shù)據(jù)導(dǎo)出來(lái),然后加上分組信息再讀入
map<-read.csv("points.csv",header = T)
map<-data.frame(map)
#手動(dòng)添加分組信息
#也可以將excel表中的分組信息(需要導(dǎo)入R中)與前兩軸坐標(biāo)進(jìn)行合并(map = merge(group, map,by="row.names",all=F))
map$name <- rownames(map)
map$group <- c(rep('A', 5), rep('B', 4), rep('C',7))
head(map)

#正式繪圖
ggplot(data = map, aes(NMDS1, NMDS2))+
geom_point(size = 2,#繪制散點(diǎn)圖
aes(color = group, shape = group))+
stat_ellipse(aes(fill = group),#加上置信橢圓
geom = 'polygon',
level = 0.95, #置信區(qū)間95%
alpha = 0.1, #透明度
segments = 51, #橢圓類型
show.legend = F)+
theme_bw()+#主題
geom_vline(xintercept = 0, color = 'black', size = 1, linetype = 3)+ #添加過(guò)原點(diǎn)線(y)
geom_hline(yintercept = 0, color = 'black', size = 1, linetype = 3)+ #添加過(guò)原點(diǎn)線(x)
xlab("NMDS1")+#x軸標(biāo)題
ylab("NMDS2")+#y軸標(biāo)題
theme(axis.title.y = element_text(size = 14))+ #y軸標(biāo)題大小
theme(axis.title.x = element_text(size = 14))+ #x軸標(biāo)題大小
geom_text(aes(x=-0.8,y=0.55,label="stress = 0.07"),size = 6)+ #設(shè)置文字位置、內(nèi)容和大小
geom_text(aes(x=-0.8,y=0.50,label="R^2 = 0.995"),size = 6)+ #添加R^2
theme(axis.text.x=element_text(size=14,angle=0,color="Black"),#設(shè)置x和y軸字體大小和顏色
axis.text.y=element_text(size=14,angle=0,color="Black"))+
theme(legend.position=c(0.95,0.9))+#設(shè)置圖例位置
theme(legend.text=element_text(size=14))+ #設(shè)置圖例字體大小
theme(legend.title = element_text(face = "bold", size = 14))#設(shè)置圖例標(biāo)題字和大小

注:stress=0.12,說(shuō)明結(jié)果不好,但有一定的可靠性。
圖的解讀
圖形中的點(diǎn)代表樣本,不同顏色/形狀代表樣本所屬的分組信息。同組樣本點(diǎn)距離遠(yuǎn)近說(shuō)明了樣本的重復(fù)性強(qiáng)弱,不同組樣本的遠(yuǎn)近則反應(yīng)了組間樣本距離在秩次(數(shù)據(jù)排名)上的差異。樣本相似性距離計(jì)算方式對(duì)結(jié)果有影響,選擇輸入不同相似性距離值的矩陣,得到的結(jié)果存在著不同程度差異。
橫縱坐標(biāo)軸含義:NMDS是距離值的秩次(數(shù)據(jù)排名)信息的評(píng)估,圖上樣本信息僅反映樣本間數(shù)據(jù)秩次信息的遠(yuǎn)近,而不反映真實(shí)的數(shù)值差異,橫縱坐標(biāo)軸并無(wú)權(quán)重意義,橫軸不一定比縱軸更加重要。
NMDS的解釋量
NMDS是非參數(shù)的方法,不應(yīng)該有解釋量,不知道他們這些NMDS的解釋率是怎么算出來(lái)的?我估計(jì)是用主坐標(biāo)分析(PCoA)的解釋量來(lái)作為NMDS的解釋量,但這種張冠李戴的做法可能是不合適的(引自賴江山老師:http://blog.sciencenet.cn/blog-267448-1146112.html)。