我在使用数据(“蝶形”)集时遇到了问题。问题是:
问题4:安装“ade4”包,后跟数据(蝶形)。我们的问题是:“遗传相似性是否与蝶群之间的地理距离相关?”使用我们称为d1的距离度量来填充遗传距离矩阵。执行Mantel随机化测试并解释结果。使用距离测量d2重复测试。有什么不同吗?将for-loop代码显示为答案的一部分,以及Mantel随机化测试中的散点图和随机化图。
下面是用于计算相异度的函数。我不懂如何
dissimilarity <- function(p1, p2){
d1 <- sum( abs(p1 - p2) / 2 )
d2_num <- sum(p1*p2)
d2_denom <- sqrt( sum(p1^2) * sum(p2^2) )
d2 <- 1 - d2_num / d2_denom
return(list(d1=d1, d2=d2))
}这是我用来建立遗传距离矩阵的代码。
library(ade4)
data("butterfly")
butterflydat<-data.frame(butterfly)
plot(butterfly$contour[,1:2], pch=16, cex=.4)
polygon(butterfly$contour[,1:2], lty=2)
points(butterfly$xy, pch=7)
nrow(butterfly$xy)
text(butterfly$xy, labels=1:16, pos=2, cex=.8)
apply(butterfly$genet,1,sum)
(Ddist <- dist(butterfly$xy))我能够计算两个地理距离之间的差异(例如):
dissimilarity(butterfly$genet[1,],butterfly$genet[2,])$d2但是我不知道如何应用for循环来填充所有地理距离的矩阵。我也不理解Mantel随机化测试。问题是,我们对每个矩阵执行Mantel随机化测试,但该测试不是比较两个矩阵(即d1和d2?)之间的相关性吗?
如有任何帮助,我将不胜感激,我对统计学和R。
发布于 2018-09-23 17:52:05
您可以使用双for循环或双apply循环来计算相异矩阵。
fun_d2 <- function(x, y) dissimilarity(x, y)$d2
apply(butterfly$genet, 1, function(x)
apply(butterfly$genet, 1, function(y) fun_d2(x, y)))因为您的函数dissimilarity返回一个包含两个成员的列表,所以需要定义函数fun_d2。
https://stackoverflow.com/questions/52464069
复制相似问题