由于16S rRNA基因的高通量测序技术的进步,环境和人体中微生物群落的直接分析变得更加方便和可靠。推断微生物群落成员间的相关关系对基因组调查研究具有重要意义。传统的皮尔森相关分析将观测数据视为微生物的绝对丰度可能会导致虚假的结果,因为这些数据只代表相对丰度。在对这些成分数据进行相关性分析之前,需要特别小心和适当的方法。
Sparcc基于绝对丰度;群落多样性是调节这种成分效应的关键因素(Additionally, we show that community diversity is the key factor that modulates the acuteness of such compositional effects );
python SparCC.py network.abundance -i 10 –cor_file=correlation.matrix –cov_file=covariance.matrix
出现了一个大于1的相关系数:25911.5752878
出现了两个空值
SparCC.count <- function(x, imax = 10, kmax = 10, alpha = 0.1, Vmin = 1e-4) {
# dimension for w (latent variables)
p <- ncol(x);
n <- nrow(x);
# posterior distribution (alpha)
x <- x + 1;
# store generate data
y <- matrix(0, n, p);
# store covariance/correlation matrix
cov.w <- cor.w <- matrix(0, p, p);
indLow <- lower.tri(cov.w, diag = T);
# store covariance/correlation for several posterior samples
covs <- cors <- matrix(0, p * (p + 1) / 2, imax);
for(i in 1:imax) {
# 生成后验分布
y <- t(apply(x, 1, function(x)
gtools::rdirichlet(n = 1, alpha = x)));
# 估计相关性阵及协方差阵
cov_cor <- SparCC.frac(x = y, kmax = kmax, alpha = alpha, Vmin = Vmin);
# 解三角矩阵
covs[, i] <- cov_cor$cov.w[indLow];
cors[, i] <- cov_cor$cor.w[indLow];
}
# 计算平均数
cov.w[indLow] <- apply(covs, 1, median);
cor.w[indLow] <- apply(cors, 1, median);
#
cov.w <- cov.w + t(cov.w);
diag(cov.w) <- diag(cov.w) / 2;
cor.w <- cor.w + t(cor.w);
diag(cor.w) <- 1;
#
return(list(cov.w = cov.w, cor.w = cor.w));
}
abu <- read.table(“~/Rmarkdown/cor/sparcc/abundance” ,sep = “\t” , header = T)
res_spa_count <- SparCC.count(x = t(abu[-1]) )
\[1>> \{ρ_{ij}\}_i\]
对于较小数据量及数量级差距比较大的数据,计算中容易产生奇异值
python脚本还有计算出空值的情况
仅依赖线性关系
成分数据边缘恢复(edge recovery for compositional data)不好;