2016-03-03 2016 views
0

我使用Vegan软件包中的simper分析来确定哪个氨基酸是造成不同样品之间蛋白质组成变化的原因。据我所知,discussion,simper()函数使用Bray-Curtis。我需要使用另一个相异性指数,通常是欧几里得。我该如何修改它的功能?谢谢。R素食主义者simper分析:修改距离矩阵

回答

1

只更改不相似性是微不足道的,但您使用的不相似应该是这样的,以便您按物种添加和分析术语。 平方欧几里德距离是这样的。然而,simper()带来了各种各样奇怪的技巧,我不能肯定这些技巧对平方欧几里德距离是有效的(我甚至不确定它们对我们使用的布雷 - 柯蒂斯是否有效,但至少它们是一致的与发布的方法)。 NB,我们做了警告反对使用simper。这是来自帮助页面的摘录 - 我希望你已经读过这个:

'simper'的结果可能很难解释。 方法非常严重地混淆了组间差异和组内变异之间的平均值,并且似乎单独列出了变量物种 而不是独特的物种(Warton et al。2012)。即使你制作的是相互拷贝的组,这个方法也将单独挑出 以外的物种,但这些不是 对不存在的组间差异的贡献,而是 物种丰度内的组内差异。

这就是说,这里是你应该改变从布雷 - 柯蒂斯到平方欧几里得的路线。不过,我建议你不要使用这个功能:

diff --git a/R/simper.R b/R/simper.R 
index 35fa189..f60c57f 100644 
--- a/R/simper.R 
+++ b/R/simper.R 
@@ -13,9 +13,8 @@ 
     n.b <- nrow(gb) 
     for(j in seq_len(n.b)) { 
      for(k in seq_len(n.a)) { 
-    mdp <- abs(ga[k, , drop = FALSE] - gb[j, , drop = FALSE]) 
-    mep <- ga[k, , drop = FALSE] + gb[j, , drop = FALSE] 
-    contrp[(j-1)*n.a+k, ] <- mdp/sum(mep) 
+    mdp <- (ga[k,, drop=FALSE] - gb[j,, drop = FALSE])^2 
+    contrp[(j-1)*n.a+k, ] <- mdp 
      } 
     } 
     colMeans(contrp) 
@@ -53,9 +52,8 @@ 
     contr <- matrix(ncol = P, nrow = n.a * n.b) 
     for (j in seq_len(n.b)) { 
      for (k in seq_len(n.a)) { 
-    md <- abs(group.a[k, , drop = FALSE] - group.b[j, , drop = FALSE]) 
-    me <- group.a[k, , drop = FALSE] + group.b[j, , drop = FALSE] 
-    contr[(j-1)*n.a+k, ] <- md/sum(me) 
+    md <- (group.a[k,,drop=FALSE] - group.b[j,,drop=FALSE])^2 
+    contr[(j-1)*n.a+k, ] <- md 
      } 
     } 
     average <- colMeans(contr) 
+0

谢谢@Jari。事实上,我读到了有关使用SIMPER分析的限制。在我的情况下,我使用simper()作为adonis permanova的事后检验来估计每种氨基酸对样品间蛋白质组成变化的贡献。到目前为止,除了对每种氨基酸进行简单的ANOVA之外,我没有找到一种比较好的替代方法。但是这并不能回答同样的问题。你可能有其他建议吗? – Pierrick