在两个列表中的矩阵之间执行成对回归分析

时间:2015-10-15 09:44:34

标签: r

考虑一下,我有两个矩阵,一个有响应,一个有预测变量,我计算每个变量的距离矩阵:

resp <- as.data.frame(matrix(rnorm(6*6,mean=1000,sd=100), 6, 6)) 
pred <- as.data.frame(matrix(rnorm(6*6,mean=1000,sd=100), 6, 6))
colnames(resp) <- paste("Resp_",letters[1:6],sep="")
colnames(pred) <- paste("Pred_",LETTERS[1:6],sep="")

#calculate distance matrices for each variable per site
Z <- lapply(resp, function(x) dist(x))
A <- lapply(pred, function(x) dist(x))

我想为A和Z之间的每对矩阵执行mantel统计:

library(vegan)
res1 <- mantel(Z[[1]], A[[1]], method="spearman", perm=999)
res2 <- mantel(Z[[2]], A[[1]], method="spearman", perm=999)

或广泛地说

res(i,j) <- mantel(Z[[1:i]], A[[1:j]], method="spearman", perm=999)

我有兴趣检索res1[[3]]和res1 [[4]]中的r和p值,可能在矩阵中,就像

一样
cor(resp, pred)

我怎么能在循环中做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

r <- p <- matrix(NA, 6, 6)

colnames(r) <- colnames(p) <- names(A)
rownames(r) <- rownames(p) <- names(Z)

for (i in 1:6) {
  for (j in 1:6) {
    m <- mantel(Z[[i]], A[[j]], method="spearman", perm=999)
    r[i, j] <- m$statistic
    p[i, j] <- m$signif 
  }
}