首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用嵌套for循环填充距离矩阵

使用嵌套for循环填充距离矩阵
EN

Stack Overflow用户
提问于 2018-09-23 15:42:49
回答 1查看 300关注 0票数 0

我在使用数据(“蝶形”)集时遇到了问题。问题是:

问题4:安装“ade4”包,后跟数据(蝶形)。我们的问题是:“遗传相似性是否与蝶群之间的地理距离相关?”使用我们称为d1的距离度量来填充遗传距离矩阵。执行Mantel随机化测试并解释结果。使用距离测量d2重复测试。有什么不同吗?将for-loop代码显示为答案的一部分,以及Mantel随机化测试中的散点图和随机化图。

下面是用于计算相异度的函数。我不懂如何

代码语言:javascript
复制
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))
}

这是我用来建立遗传距离矩阵的代码。

代码语言:javascript
复制
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))

我能够计算两个地理距离之间的差异(例如):

代码语言:javascript
复制
dissimilarity(butterfly$genet[1,],butterfly$genet[2,])$d2

但是我不知道如何应用for循环来填充所有地理距离的矩阵。我也不理解Mantel随机化测试。问题是,我们对每个矩阵执行Mantel随机化测试,但该测试不是比较两个矩阵(即d1和d2?)之间的相关性吗?

如有任何帮助,我将不胜感激,我对统计学和R。

EN

回答 1

Stack Overflow用户

发布于 2018-09-23 17:52:05

您可以使用双for循环或双apply循环来计算相异矩阵。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52464069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档