2016-03-03 115 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