R语言vegan包metaMDS绘制NMDS图:10样本仅显示7点的原因咨询
使用vegan包metaMDS绘制NMDS图时样本点缺失的排查思路
问题描述
在R语言中使用vegan包的metaMDS函数绘制NMDS图,原始数据包含10个样本,但生成的图中仅显示7个点,代码未发现明显问题,需排查原因。
运行代码
beta_gene <- read.table("normalized_gene_counts_CvsM_3.csv", check.names = F, header = TRUE, sep = ",", row.names = 1) beta_gene <- t(beta_gene) beta.env <- read.table("EO_meta_CvsM_3.csv", header = TRUE, sep = ",") data_gene_dist <- vegdist(beta_gene, method = "bray") # NMDS ordination beta_gene_ord <- metaMDS(data_gene_dist, distance = "bray") plot(beta_gene_ord, type="none") colall <- c(5,6) points(beta_gene_ord, display = "sites", pch=20, col=colall[as.numeric(as.factor(beta.env$Treatment))])
可能的原因及排查步骤
- 样本名不匹配:检查转置后的
beta_gene(行是样本)与beta.env的样本ID是否完全对应。可通过all(rownames(beta_gene) %in% beta.env$样本ID列名)验证(替换为实际存储样本ID的列名),若不匹配,后续绘图时会因索引错误丢失样本点。 - 零方差样本被自动剔除:若某个样本的所有基因计数完全一致(方差为0),
vegdist计算距离会出问题,metaMDS会自动剔除这类样本。用apply(beta_gene, 1, var)查看每行样本的方差,筛选方差为0的样本。 - 距离矩阵存在缺失值:极端情况下(如样本间无共有特征),
vegdist会生成NA值,metaMDS默认剔除含NA的样本。用any(is.na(data_gene_dist))检查距离矩阵,若存在NA,需对应查看样本的特征分布。 - 重复样本被合并:
metaMDS默认会移除与其他样本距离完全为0的重复样本(即特征完全相同的样本)。查看nrow(beta_gene_ord$points)确认参与排序的样本数,对比原始10个样本,判断是否有重复样本被合并。 - 绘图索引不匹配:检查
colall[as.numeric(as.factor(beta.env$Treatment))]的长度是否与beta_gene_ord$points的行数一致,若长度不匹配,会导致部分样本点因无对应配色无法绘制。
内容的提问来源于stack exchange,提问作者Sudipta Talukder
相关产品推荐
相关产品推荐

