寫在前面的題外話:目前已經進入本書的第三章的學習。這對于統(tǒng)計學知識薄弱的我來說,已經略顯吃力了···后面也許會難度提升,且抱著打怪升級般激動并忐忑的心情繼續(xù)前進,希望能夠堅持以預想的方式把這本書吃完突勇。Keep moving~
首先,關聯(lián)測度其目的是量化對象對或變量對之間的關系芹敌。
比較對象對的分析稱為Q模式,比較變量對的分析稱為R模式。
Q模式中,關聯(lián)測度是對象之間的相異或相似班缎,例如歐氏距離趁耗、Jaccard相似系數罢屈。R模式中曼月,關聯(lián)測度是變量之間的依賴性測度聪姿,例如協(xié)方差或相關系數。
Q模式下對稱或非對稱的系數下的雙零問題:
這里的對稱是指對象n1與對象n2之間的系數與n2與n1之間的系數是相同的。
雙零問題應該注意的是零值是否具有明確的意義顶籽。比如在物種多度矩陣中的零值匀伏,一個物種在兩個樣方內同時缺失履磨,其原因可能是完全不同的矛辕。它可能是該樣方不適合該物種生存抒抬,也可能是暫時未擴散惠勒,或者是沒有被監(jiān)測出來等原因售担。所以在這時哥攘,物種的存在信息比物種缺失的信息有更明確的意義妥畏。
在進行關聯(lián)測度分析前滥玷,需要明確以下幾個問題:
1杠袱、是比較對象(Q模式分析)還是比較變量(R模式分析)惨恭?
2脓规、是處理物種數據(通常是非對稱系數)還是其他類型的變量(對稱系數)夷陋?
3愁铺、數據是二元(二元系數)還是定量(數量系數)?還是這兩種類型的混合督勺?或者其他類型數據(序數渗蟹,特殊的系數)淮腾?
Q模式:計算對象之間的相異矩陣
用到的R包有stats(自帶的)、vegan玉雾、ade4翔试、adespatial、cluster和FD复旬。
在R里垦缅,所有的相似測度方陣可以轉化為相異測度矩陣,距離方陣對角線的值均為0驹碍。并且默認所有關聯(lián)測度均是相異測度壁涎。
定量的物種數據通常需要使用非對稱的距離矩陣。
百分數差異(Bray-Curtis)相異矩陣:可以直接由原始數據計算志秃。
弦(chord)距離:實際是指先將樣方向量的范數標準化后再計算樣方對的歐氏距離怔球。
Hellinger距離:是多度值先除以樣方多度總和再取平方根后計算的歐氏距離「』梗可以減少較大多度值的權重竟坛。
定量的物種數據的代碼運行:
先加載所要用到的安裝包,以及函數“coldiss”钧舌、“panelutils”和數據Doubs担汤。
在進行相異矩陣分析前,剔除無物種數據的樣方洼冻。
原始數據的百分數差異(Bray-Curtis)相異矩陣:spe.db <- vegdist(spe)
對數轉化后物種數據的Bray-Curtis相異矩陣:spe.dbln <- vegdist(log1p(spe))
這里使用log1p實際是相當于log(1+x)崭歧,可以適用于|x|<<1。
弦(chord)距離矩陣:spe.dc <- dist.ldc(spe, “chord”)
如果是用vegan包計算:spe.norm <- decostand(spe, “nor”)
spe.dc <- dist(spe.norm)
Hellinger距離矩陣:spe.dh <- dist.ldc(spe) (函數默認)
如果是用vegan包計算:spe.hel <- decostand(spe, “hel”)
spe.dh <- dist(spe.hel)
對數轉化后弦距離矩陣:spe.logchord <- dist.ldc(spe, “l(fā)og.chord”)
如果是用vegan包計算:spe.ln <- log1p(spe)
spe.ln.norm <- decostand(spe.ln, “nor”)
spe.logchord <- dist (spe.ln.norm)
Q模式:二元(有-無)物種數據
數據為0-1模式撞牢,若是把定量數據轉化為二元數據率碾,則將所有大于0的值全部變?yōu)?叔营。這里主要介紹了Jaccard系數和Sorensen系數以及Ochiai系數。兩者的區(qū)別是播掷,Jaccard系數是兩個樣方共有系數除以兩個樣方所含的全部物種數审编。Sorensen系數是給予兩個樣方共有物種數雙倍的權重,其反數等價于基于物種有無數據計算的百分數差異相異系數歧匈。Ochiai系數與弦距離垒酬、Hellinger距離和對數弦距離都有關系。即弦轉化件炉、Hellinger轉化和對數弦轉化對物種有無的數據均有意義勘究。
代碼運行:
Jaccard相異矩陣:spe.dj <- vegdist (spe, “jac”, binary =TRUE)
或者用dist函數:spe.dj2 <- dist (spe, “binary”)
或用dist.binary函數:spe.dj3 <- dist.binary(spe, method = 1)
Sorensen 相異矩陣:spe.ds <- dist.ldc(spe, “Sorensen”)
或:spe.ds2 <- vegdist(spe, method = “bray”, binary = TRUE)
或:spe.ds3 <- dist.binary(spe, method = 5)
Ochiai 相異矩陣:spe.och <- dist.ldc(spe, “ochiai”)
或:spe.och <- dist.binary(spe, method = 7)
(所有的二元距離函數在計算系數時,會自動對數據進行二元轉化斟冕。Vegdist函數的binary參數設置為TRUE即可口糕。)
關聯(lián)矩陣一般只是作為中間實體,所以下面使用coldiss()函數進行可視化磕蛇。
coldiss()函數的使用說明:coldiss(D = dist.object, nc =4, byrank =TRUE, diag = FALSE)
D為相異矩陣景描,nc為顏色種類數量,byrank為分級:TRUE為等大小分級秀撇,每個顏色所包含的值的數量一樣多超棺。FALSE為等區(qū)間分級,每個顏色所包含的值的區(qū)間一樣長呵燕。diag表示樣方號的位置棠绘。TRUE表示在矩陣對角線上。
基于原始魚類多度數據的百分數差異相異矩陣:coldiss(spe.db, byrank = FALSE, diag = TRUE)
基于對數轉化數據的百分數差異相異矩陣:coldiss(spe.dbln,byrank = FALSE, diag = TRUE)
弦距離矩陣:coldiss(spe.dc, byrank = FALSE, diag =TRUE)
Hellinger距離矩陣:coldiss(spe.dh, byrank = FALSE, diag = TRUE)
對數轉化后的弦距離矩陣:coldiss(spe.logchord,byrank = FALSE, diag = TRUE)
Jaccard相異矩陣:coldiss(spe.dj, byrank = FALSE, diag = TRUE)
簡單匹配相異系數:coldiss(spe.s1 ^ 2, byrank = FALSE, diag =TRUE)
Q模式:定量數據(除物種多度數據外的數據)
對于雙零有明確解釋的定量數據再扭,歐氏距離是對稱距離測度的最佳選擇氧苍。歐氏距離的值沒有上限,但受每個變量量綱的強烈影響泛范。因此一般要求原始數據具有相同的量綱让虐。如果賦予不同量綱的變量相同的權重,需要使用標準化后的數據罢荡。
可視化運行:
標準化后計算的歐氏距離矩陣:env.de <- dist(scale(env2))
coldiss(env.de, nc= 16, diag = TRUE)?? ##nc = 16為等數量的分級
物種數據的Hellinger距離矩陣:coldiss (spe.dh,nc = 16, diag = TRUE)
基于二維空間坐標的歐氏距離矩陣:spa.de <-dist(spa)
coldiss(spa.de, nc= 16, diag = TRUE)
基于一維dfs變量的歐氏距離矩陣:
dfs.df <- as.data.frame(env$dfs, row.names = rownames(env))
riv.de <- dist(dfs.df)
coldiss(riv.de, nc= 16, diag = TRUE)
Q模式:二元數據(除物種有-無數據外的數據)
對于二元數據赡突,最簡單的對稱相似測度是“簡單匹配系數S1”。
隨機生成數據進行練習:
10個1和20個0柠傍,順序隨機:var1 <- sample(c(rep(1, 10), rep(0,20)))
15個0在一起麸俘,15個1在一起:var2 <- c(rep(0, 15), rep(1, 15))
3個1辩稽,3個0交替出現:var3 <- rep(c(1, 1, 1, 0, 0, 0), 5)
5個1惧笛,10個0交替出現:var4 <- rep(c(rep(1, 5), rep(0, 10)), 2)
前16個是7個1,和9個0的隨機排列,接著是4個0和10個1:
var5.1 <-sample(c(rep(1, 7), rep(0, 9)))
var5.2 <-c(rep(0, 4), rep(1, 10))
var5 <-c(var5.1, var5.2)
5個變量合成一個數據框:(dat <- data.frame(var1, var2, var3,var4, var5))
簡單匹配系數的計算:dat.s1 <- dist.binary(dat, method = 2)
coldiss(dat.s1,diag = TRUE)
R模式:計算變量之間的依賴矩陣
1逞泄、R模式:物種多度數據
除了相關系數患整,在Q模式中用到的卡方距離同樣也適用于Q模式的轉置矩陣(即R模式)拜效。
spe.t <- t(spe)
spe.t.chi <- decostand(spe.t,"chi.square")
spe.t.D16 <- dist(spe.t.chi)
coldiss(spe.t.D16, diag = TRUE)
2、R模式:物種有-無數據
魚類有-無數據的Jaccard指數:
spe.t.S7 <- vegdist(spe.t,"jaccard", binary = TRUE)
coldiss(spe.t.S7, diag = TRUE)
3各谚、R模式:定量和序數數據(除物種多度外的數據)
對于相同量綱的定量變量而言紧憾,協(xié)方差和Pearson相關系數都是不錯的選擇。但是因為它們都是線性模型昌渤,所以當變量之間是單調但非線性關系時效果將變得不好赴穗。對于不同量綱的變量,Pearson相關系數r比協(xié)方差更合適膀息,因為r實際上是標準化后的協(xié)方差般眉。序數變量對或單調但非線性關系定量變量對的比較可以采用秩相關系數。
環(huán)境變量之間的Pearson線性相關系數r:
env.pearson <- cor(env)??? # default method = "pearson"
round(env.pearson, 2)
繪圖前重新排位變量:env.o <- order.single(env.pearson)
pairs(
?env[, env.o],
?lower.panel = panel.smooth,
?upper.panel = panel.cor,
?diag.panel = panel.hist,
?main = "Pearson Correlation Matrix"
)
秩相關:env.ken <- cor(env, method ="kendall")
env.o <- order.single(env.ken)
4潜支、R模式:二元數據(除物種多度外的數據)
比較成對的二元變量最簡單的方式是計算Pearson相關系數甸赃。
物種數據的非對稱的關聯(lián)測度可以通過兩個步驟獲得:首先對原始數據進行轉化,然后計算歐氏距離冗酿。
附代碼及筆記鏈接埠对,需要自取。
鏈接:https://pan.baidu.com/s/1udkF1kgW3k59CpL6fI19-Q
提取碼:ie9a