您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么用R語言分析Hellinger轉化問題的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么用R語言分析Hellinger轉化問題文章都會有所收獲,下面我們一起來看看吧。
關于物種組成數據Hellinger的轉化
一般而言,對于物種組成數據較少使用PCA這種線性模型去做,PCoA或NMDS等是比較推薦的。
如果仍要使用PCA的話,事實上,并不是說物種多度數據一定要作轉化才行。如果物種多度數據比較均勻,且含有很少的0值(這是最關鍵的,避開了歐幾里得距離對“雙零”敏感這一問題),則不轉化也是可以的。
比方說示例數據“phylum_table.txt”,由于是門水平(一個很大的類別)的類群統計,本身0值較少,其實也可以不執行Hellinger轉化的。盡管如此,可能高豐度和低豐度種群的豐度差別還是非常大,數據并不“均勻”,此時可以通過在運行rda()時,通過“scale=TRUE”消除高豐度物種與稀有物種在重要性方面的差異,降低歐幾里得距離對高數值的敏感性。
但如果0值過多,執行PCA時還是推薦Hellinger轉化,我們換個數據說明下吧。
網盤文件“otu_table.txt”是OTU水平的物種豐度表,其中含有非常多的0值,然后我們比較下Hellinger轉化前后的PCA差異。
#對比物種數據 Hellinger 轉化前后的差異 otu <- read.delim('otu_table.txt', sep = '\t', row.names = 1, stringsAsFactors = FALSE, check.names = FALSE) otu_hel <- decostand(otu, method = 'hellinger') pca_sp1 <- rda(otu, scale = FALSE) #使用 Hellinger 轉化前的數據 pca_sp2 <- rda(otu_hel, scale = FALSE) #使用 Hellinger 轉化后的數據 pca_sp3 <- rda(otu, scale = TRUE) #使用 Hellinger 轉化前的數據,但執行標準化 #特征值提取 pca_exp1 <- pca_sp1$CA$eig / sum(pca_sp1$CA$eig) pc1_sp1 <- paste('PC1:', round(pca_exp1[1]*100, 2), '%') pc2_sp1 <- paste('PC2:',round(pca_exp1[2]*100, 2), '%') pca_exp2 <- pca_sp2$CA$eig / sum(pca_sp2$CA$eig) pc1_sp2 <- paste('PC1:', round(pca_exp2[1]*100, 2), '%') pc2_sp2 <- paste('PC2:',round(pca_exp2[2]*100, 2), '%') pca_exp3 <- pca_sp3$CA$eig / sum(pca_sp3$CA$eig) pc1_sp3 <- paste('PC1:', round(pca_exp3[1]*100, 2), '%') pc2_sp3 <- paste('PC2:',round(pca_exp3[2]*100, 2), '%') #I 型標尺 par(mfrow = c(2, 2)) #ordiplot(pca_sp1, scaling = 1, display = 'site', type = 'text') #ordiplot(pca_sp2, scaling = 1, display = 'site', type = 'text') #ordiplot(pca_sp3, scaling = 1, display = 'site', type = 'text') ordiplot(pca_sp1, dis = 'site', type = 'n', choices = c(1, 2), scaling = 1, main = 'Hellinger 前,不標準化', xlab = pc1_sp1, ylab = pc2_sp1) points(pca_sp1, dis = 'site', choices = c(1, 2), scaling = 1, pch = 21, bg = c(rep('red', 12), rep('orange', 12), rep('green3', 12)), col = NA, cex = 1.2) ordiplot(pca_sp2, dis = 'site', type = 'n', choices = c(1, 2), scaling = 1, main = 'Hellinger 后,不標準化', xlab = pc1_sp2, ylab = pc2_sp2) points(pca_sp2, dis = 'site', choices = c(1, 2), scaling = 1, pch = 21, bg = c(rep('red', 12), rep('orange', 12), rep('green3', 12)), col = NA, cex = 1.2) ordiplot(pca_sp3, dis = 'site', type = 'n', choices = c(1, 2), scaling = 1, main = 'Hellinger 前,標準化', xlab = pc1_sp3, ylab = pc2_sp3) points(pca_sp3, dis = 'site', choices = c(1, 2), scaling = 1, pch = 21, bg = c(rep('red', 12), rep('orange', 12), rep('green3', 12)), col = NA, cex = 1.2)
Hellinger轉化前,且未標準化的數據,存在很大的方差、組內離散度高、趨勢不明顯且略微呈現了“馬蹄形效應”;Hellinger轉化后或者未Hellinger轉化但標準化后的數據,樣方分布明顯,但相較之下,Hellinger轉化后的區分程度更高,主成分軸的解釋量具代表性。
關于“怎么用R語言分析Hellinger轉化問題”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么用R語言分析Hellinger轉化問題”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。