溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用R語言分析Hellinger轉化問題

發(fā)布時間:2022-03-21 10:27:03 來源:億速云 閱讀:595 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了怎么用R語言分析Hellinger轉化問題的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么用R語言分析Hellinger轉化問題文章都會有所收獲,下面我們一起來看看吧。

關于物種組成數據Hellinger的轉化

一般而言,對于物種組成數據較少使用PCA這種線性模型去做,PCoA或NMDS等是比較推薦的。

如果仍要使用PCA的話,事實上,并不是說物種多度數據一定要作轉化才行。如果物種多度數據比較均勻,且含有很少的0值(這是最關鍵的,避開了歐幾里得距離對“雙零”敏感這一問題),則不轉化也是可以的。

比方說示例數據“phylum_table.txt”,由于是門水平(一個很大的類別)的類群統(tǒng)計,本身0值較少,其實也可以不執(zhí)行Hellinger轉化的。盡管如此,可能高豐度和低豐度種群的豐度差別還是非常大,數據并不“均勻”,此時可以通過在運行rda()時,通過“scale=TRUE”消除高豐度物種與稀有物種在重要性方面的差異,降低歐幾里得距離對高數值的敏感性。

但如果0值過多,執(zhí)行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 轉化前的數據,但執(zhí)行標準化
 
#特征值提取
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轉化后的區(qū)分程度更高,主成分軸的解釋量具代表性。

關于“怎么用R語言分析Hellinger轉化問題”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么用R語言分析Hellinger轉化問題”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI