如何使用 Vegan 在 R 中绘制稀疏曲线?

问题描述

我有一个数据集,其中包含在不同参考基因组中识别的基因。因此,参考基因组在行中,基因在表的列中。该表被编码为二进制,其中 0 表示该基因不存在,1 表示该基因存在。我制作了基因积累曲线,这表明每个基因组的基因数量正在接近平台期。现在,我正在尝试使用 R 包 vegan 绘制稀疏曲线。我使用了以下代码

b<-read.csv("data.csv",header = T,check.names = F)
S <- specnumber(b) # observed number of species
(raremax <- min(rowSums(b)))
Srare <- rarefy(b,raremax)
plot(Srare,xlab = "Observed No. of genes",ylab = "Rarefied No. of genes")
abline(0,1)
rarecurve(b,step = 15,sample = raremax,col = "blue",cex = 0.6)

数据集如下:

          gene1 gene2 gene3
#genome1    0     1     0
#genome2    1     0     1
#genome3    1     0     1

但是,使用此代码我没有得到任何令人满意的输出。我只得到一条穿过对角线的直线。我附上了下面的输出

rarefaction curve

有人可以建议我如何更正输出吗?

谢谢。

解决方法

rarefy 函数对数据的各个行进行精简:它对每一行中出现的事件(“个体”)进行子样本。如果所有这些抽样个体的值都为 1,那么您将有一个子样本,而这些的总和就是样本量:这就是您得到的。对 1 的向量进行稀疏化没有有意义的方法:您需要对某些计数 > 1 的计数数据进行计数。

在对矩阵的进行二次采样时,您可能正在寻找整个数据集中基因的积累。这是在 vegan 函数 specaccum(参数 method = "exact")中完成的,它有自己的 plot 等方法。