【发布时间】:2020-08-14 23:11:01
【问题描述】:
我想找到一个大型稀疏矩阵的 pvalues。该矩阵中的所有元素都是标准的正态 z 分数。我想使用pnorm函数,但是遇到了pnorm不支持稀疏矩阵的问题。除了将稀疏矩阵转化为全矩阵,还有其他更高效的方法吗?
欢迎提出任何建议!
【问题讨论】:
标签: r matrix sparse-matrix
我想找到一个大型稀疏矩阵的 pvalues。该矩阵中的所有元素都是标准的正态 z 分数。我想使用pnorm函数,但是遇到了pnorm不支持稀疏矩阵的问题。除了将稀疏矩阵转化为全矩阵,还有其他更高效的方法吗?
欢迎提出任何建议!
【问题讨论】:
标签: r matrix sparse-matrix
如果是稀疏矩阵,你可以很容易地用 pnorm(0..) 替换 0 值。剩下的就是计算非零值,您可以这样做。例如一个稀疏矩阵:
data <- rnorm(1e5)
zero_index <- sample(1e5)[1:9e4]
data[zero_index] <- 0
mat <- matrix(data, ncol=100)
mat_sparse <- Matrix(mat, sparse=TRUE)
用 pnorm 为 0 创建一个矩阵:
mat_pnorm <- matrix(pnorm(rep(0,length(mat_sparse))),ncol=ncol(mat_sparse))
nzData <- summary(mat_sparse)
mat_pnorm[as.matrix(nzData[,1:2])] <- pnorm(nzData$x)
all.equal(mat_pnorm,pnorm(mat))
[1] TRUE
您没有指定您希望 p 值的方式,但您可以轻松地将其转换为向量而不是上面使用的矩阵。
【讨论】: