繁体   English   中英

相同维度的两个矩阵之间的Spearman相关性

[英]Spearman correlation between two matrices of same dimensions

我有两个维数相等的矩阵(p和e),我想在同名列之间建立一个spearman相关性。 我想在矩阵(M)中具有对相关的输出

我使用了Psych库中的corr.test()函数,这是我所做的:

library(psych)
M <- data.frame(matrix(ncol=3,nrow=ncol(p)))
M[,1] <- as.character()
G <- colnames(p)
for(rs in 1:ncol(p){
      M[rs,1] <- G[rs]     
      cor <- corr.test(p[,rs],e[,rs],method="spearman",adjust="none")
      M[rs,2] <- cor$r
      M[rs,3] <- cor$p
}

但是我收到一条错误消息:

Error in 1:ncol(y) : argument of length 0

您能告诉我什么地方出问题了吗? 或建议另一种方法?

不需要所有这些循环和索引等操作:

# test data
p <- matrix(data = rnorm(100),nrow = 10)
e <- matrix(data = rnorm(100),nrow = 10)

cor <- corr.test(p, e, method="spearman", adjust="none")
data.frame(name=colnames(p), r=diag(cor$r), p=diag(cor$p))

#  name           r         p
#a    a  0.36969697 0.2930501
#b    b  0.16363636 0.6514773
#c    c -0.15151515 0.6760652
# etc etc

如果矩阵名称不匹配,请match它们:

cor <- corr.test(p, e[,match(colnames(p),colnames(e))], method="spearman", adjust="none")

由于这两个矩阵很大,因此在所有可能的对上执行函数corr.test()都需要很长时间的system.time,但最终起作用的循环如下:

    library(psych)
    M <- data.frame(matrix(ncol=3,nrow=ncol(p)))
    M[,1] <- as.character()
    G <- colnames(p)
    for(rs in 1:ncol(p){
          M[rs,1] <- G[rs]     
          cor <- corr.test(as.data.frame(p[,rs]),as.data.frame(e[,rs]),
method="spearman",adjust="none")
          M[rs,2] <- cor$r
          M[rs,3] <- cor$p
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM