我有一个数据矩阵,其中每列对应于一些测量的物质浓度,我需要将每种物质回归到其他所有物质,并使用一些固定的校正协变量。
由于设计矩阵一直在变化,fastLm()
包中的RcppArmadillo
等函数实际上并没有用(我之前查看了this)。
非常幼稚且不可取的想法是制作一个for循环,比如
Ncol <- ncol(mat)
mat1 <- mat2 <- matrix(ncol=Ncol, nrow=Ncol) ## matrices where I'll save what I need
for(i in seq(Ncol)) {
for(j in seq(Ncol)[-i]) {
mylm <- lm(mat[,i] ~ mat[,j] + covariates)
mat1[i,j] <- summary(mylm)$something
mat2[i,j] <- summary(mylm)$something.else
}
}
我实际上正在运行,因为我没有更好的想法。我不熟悉矢量化算法,但我很确定它会加快速度。
有人对如何加快计算有任何建议吗?我必须对4个数据集进行分析,每个数据集大约有300,650,800,2000列......
答案 0 :(得分:0)
这几乎是我的包MatrixEQTL
所做的。
这是一个用于在数据上运行它的代码。
(没有你的数据就无法测试它,所以如果出现问题,请告诉我。)
library(MatrixEQTL)
data = SlicedData$new(t(mat))
cvrt = SlicedData$new(t(covariates))
me = Matrix_eQTL_engine(
snps = data,
gene = data,
cvrt = cvrt,
output_file_name = NULL,
pvOutputThreshold = 1,
useModel = modelLINEAR,
errorCovariance = numeric(),
verbose = TRUE,
pvalue.hist = FALSE,
min.pv.by.genesnp = FALSE,
noFDRsaveMemory = FALSE);
t统计数据和p值将位于me$all$eqtls
。