然後計算降維後數據集之間的典範相關係數。
即可得到典範相關係數。如果上述降維為多個正交軸(最大min[p,q]),則得到各軸的典範相關係數。
CCorA(canonical correlation analysis)出現時間較早,早期也稱為CCA。但考慮到後來出現了典範對應分析(canonical correspondence analysis,CCA),為了區分二者,儘量避免使用CCA作為CCorA的簡稱。
CCorA屬於對稱分析(symmetrical analysis),兩組數據集相互之間無響應變量和解釋變量之分,二者地位等同。例如基因共表達、物種間互作、群落演替過程中物種-環境長期相互作用等。因此,CCorA是一種用於描述數據的探索性分析方法,而非確立因果關係的模型,不涉及假設檢驗過程。但如果有必要,仍可以通過置換檢驗確立相關性的顯著性。
如果分析的兩個數據集之間存在因果關係,例如常見的「處理-響應」類型,或者如物種(代表響應變量)與環境(代表解釋變量)之間的關係,推薦使用RDA、CCA等模型方法。
CCorA還可用於確定一組典範變量,即每個組內變量的正交線性組合,可以最好地解釋組內和組間的變異性。
CCorA要求兩組數據為符合多元正態分布的定量數據。且數據集中的變量具有不同的量綱時,需要標準化處理。
本篇簡介R包vegan的CCorA方法。
library(vegan)
#查看文檔,最下方的示例
?CCorA
vegan包的內置數據集「mite」,記錄了70個土壤觀測地點的35種甲蟎的個體數量,行為觀測地點,列為甲蟎物種。
library(vegan)
#甲蟎數據集
#詳情 https://www.rdocumentation.org/packages/vegan/versions/2.4-2/topics/mite
data(mite)
head(mite[ ,1:10])
接下來使用該甲蟎數據,展示vegan中的CCorA過程。
按照文檔中的示例,應該是期望確立兩組亞群甲蟎物種之間是否存在某種關聯(正相關可表示趨於共存,負相關可表示趨於競爭)。且兩組數據均為物種變量,地位等同。
#對土壤地點設置分組(分組參考自 Legendre 2005, Fig. 4 的 PCA)
group.1 <- c(1, 2, 4:8, 10:15, 17, 19:22, 24, 26:30)
group.2 <- c(3, 9, 16, 18, 23, 25, 31:35)
#按分組將物種多度數據拆分為兩組數據集
#物種多度數據分析,推薦執行 Hellinger 轉化
mite.hel.1 <- decostand(mite[,group.1], 'hel')
mite.hel.2 <- decostand(mite[,group.2], 'hel')
rownames(mite.hel.1) = paste('S', 1:nrow(mite), sep = '')
rownames(mite.hel.2) = paste('S', 1:nrow(mite), sep = '')
CCorA前,需確定兩組定量數據是否符合多元正態分布,可通過前述MANOVA中提到的Q-Q圖作評估。
#Q-Q 圖評估多元正態性
#若數據服從多元正態性,則點將落在直線附近
par(mfrow = c(1, 2))
qqplot(qchisq(ppoints(nrow(mite.hel.1)), df = ncol(mite.hel.1)), mahalanobis(mite.hel.1, colMeans(mite.hel.1), cov(mite.hel.1)))
abline(a = 0, b = 1)
qqplot(qchisq(ppoints(nrow(mite.hel.2)), df = ncol(mite.hel.2)), mahalanobis(mite.hel.2, colMeans(mite.hel.2), cov(mite.hel.2)))
abline(a = 0, b = 1)
「mite.hel.2」符合,但「mite.hel.1」偏離程度比較明顯。
理論上該「mite.hel.1」數據集不能繼續用於CCorA,但由於本文僅為示例演示,所以請允許我們忽略多元正態性的問題,繼續演示。
實際的情況中,不妨試下其它的轉化數據方法可不可行,否則不可使用。
vegan中,CCorA()用於執行CCorA。
#CCorA,詳情 ?CCorA
#Y 和 X 地位等同
#這裡兩組均為物種豐度,量綱一致,且 Hellinger 轉化降低了高豐度物種的權重,故無需對兩組數據集標準化
#若量綱不同(比如不同的環境變量),則需要將對應的數據集標準化
#999 次置換確定相關性的顯著性
out <- CCorA(Y = mite.hel.1, X = mite.hel.2, stand.Y = FALSE, stand.X = FALSE, permutations = 999)
out
Rank顯示了Y和X矩陣中的變量個數。
Pillai's trace是典範相關係數的和。
Significance of Pillai's trace為置換檢驗的結果,其中from F-distribution代表了隨機置換過程中所得的期望Pillai's trace,based on permutations代表了p值,這裡可知相關性是顯著的。
Canonical Correlations代表了各個軸的典範相關係數,它們的加和即等於Pillai's trace。通過前幾個有代表性的軸所示的相關性,兩組數據集整體相關程度很高。
RDA R squares,Y|X和X|Y的RDA的雙變量冗餘係數(R2),adj. RDA R squares是校正後的R2。它們嚴格來說不屬於CCorA的計算部分,但可以評估一組變量的總變差能夠由另一組變量在一個或多個正交軸上的解釋程度。因為即使R2很小時,也可能出現較大的典範相關係數,此時可根據R2評估典範相關係數的合理性。
對於主要信息的提取。
#根據 summary() 的提示,提取主要信息
summary(out)
#例如
#Pillai's trace
out$Pillai
#各個軸的典範相關係數
out$Eigenvalues
#校正後的 RDA R2
out$RDA.adj.Rsq
#置換檢驗 p 值
out$p.perm
上面給出了兩個數據集整體的相關性。
對於各變量間的相關性,例如我們想知道哪些物種和哪些物種之間存在較大的相關,可通過排序圖觀測。
vegan中提供了一些可視化方案,例如biplot()。biplot()一次會輸出兩個圖,分別代表矩陣Y和X。由於CCorA是對稱分析,所以兩個排序圖互有關聯,典範軸顯示了兩個矩陣的共同變化趨勢。每個排序圖都是兩組變量線性組合的結果,所以單個變量解讀比較困難,需兩個圖結合起來解讀。
#作圖觀測,如 biplot(),詳情 ?CCorA
#「objects」生成兩個對象圖,第一個表示 Y 矩陣中的對象,第二個表示 X 矩陣中的對象;以展示第 1、2 軸為例
biplot(out, plot.type = 'objects', plot.axes = c(1, 2))
#「variables」 生成兩個變量圖,第一個表示 Y 矩陣中的變量,第二個表示 X 矩陣中的變量;以展示第 1、2 軸為例
biplot(out, plot.type = 'variables', plot.axes = c(1, 2), cex = c(0.7, 0.6))
#「ov」生成四個圖,包含兩個對象和兩個變量;以展示第 1、2 軸為例
biplot(out, plot.type = 'ov', plot.axes = c(1, 2), cex = c(0.7, 0.6))
#「biplots」產生兩個雙序圖,第一個用於 Y 矩陣,第二個用於 X 矩陣;以展示第 1、2 軸為例
biplot(out, plot.type = 'biplots', plot.axes = c(1, 2), cex = c(0.7, 0.6))
好了我們結合上述這兩個雙序圖作個解讀,加深對這種變量間相關性的理解。CCorA中,變量間的相關性是通過在兩個數據集中,變量在對象中的相似分布特徵,作為呈現的。因此,排序圖中的相關性可以這樣解讀。
Hotelling, H. 1936. Relations between two sets of variates. Biometrika 28: 321-377.Legendre, P. 2005. Species associations: the Kendall coefficient of concordance revisited. Journal of Agricultural, Biological, and Environmental Statistics 10: 226-245.