CoDS.wt中的NMDS错误:权重必须是非负的而不是全部为零

时间:2018-06-10 16:42:47

标签: r vegan

我正在尝试制作一个NMDS图,说明OTU如何随土壤类型而变化。

以下是我在OTU表和元数据文件中读取后的代码部分:

# Calculate distance for NMDS
sol=metaMDS(DATA1)

# NMDS data frame
NMDS = data.frame(MDS1 = sol$points[,1], MDS2 = sol$points[,2],group=meta$Soil.type)
NMDS.mean=aggregate(NMDS[,1:2],list(group=meta$Soil.type),mean)

# Vegan Cov Ellipse function
veganCovEllipse<-function (cov, center = c(0, 0), scale = 1, npoints = 100) 
{
  theta <- (0:npoints) * 2 * pi/npoints
  Circle <- cbind(cos(theta), sin(theta))
  t(center + scale * t(Circle %*% chol(cov)))
}

df_ell <- data.frame()
for(g in levels(NMDS$group)){
  df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
                                               veganCovEllipse(cov.wt(cbind(MDS1,MDS2),wt=rep(1/length(MDS1),length(MDS1)))$cov,center=c(mean(MDS1),mean(MDS2)))))
                            ,group=g))
}

此时,我收到以下错误:

Error in cov.wt(cbind(MDS1, MDS2), wt = rep(1/length(MDS1), length(MDS1))) : 
  weights must be non-negative and not all zero

以下是我的NMDS数据框的子集:

         MDS1        MDS2                    group
B1_02   -0.01562695 -0.39211505    Sandy clay in valleys
B1_0210 -0.83751037 -0.17452227    Sandy clay in valleys
B1_1020 -0.49050044 -0.19169209    Sandy clay in valleys
B1_Litt  0.69079105 -0.07051786    Sandy clay in valleys
B2_0210 -0.75019323  0.30193393    Sandy clay in valleys
B2_1020 -1.21495108  0.01854564    Sandy clay in valleys
B2_Litt  0.75491704 -0.08715606    Sandy clay in valleys

我在使用不同的元数据和OTU文件之前运行了这段代码,所以我认为代码应该没问题。问题必须出在我这次使用的文件上。我不理解错误,但我猜测它是指我的NMDS数据框中的负MDS1和MDS2值。

我没有在网上找到关于如何处理问题的信息,而且我不知所措。

有没有办法让我的代码即使使用负值也能正常工作?

0 个答案:

没有答案