这篇文章主要介绍了怎么用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。