R 如何通过计算相关系数来降低基因表达矩阵的维数?
我感兴趣的是找到一系列基因之间的皮尔逊相关系数。基本上,我有Affymetrix基因水平表达矩阵(行中的基因和列中的样本ID),我有微阵列实验观察的注释数据,行中的样本ID和列中的描述识别 数据R 如何通过计算相关系数来降低基因表达矩阵的维数?,r,matrix,bioinformatics,correlation,limma,R,Matrix,Bioinformatics,Correlation,Limma,我感兴趣的是找到一系列基因之间的皮尔逊相关系数。基本上,我有Affymetrix基因水平表达矩阵(行中的基因和列中的样本ID),我有微阵列实验观察的注释数据,行中的样本ID和列中的描述识别 数据 > expr_mat[1:8, 1:3] Tarca_001_P1A01 Tarca_003_P1A03 Tarca_004_P1A04 1_at 6.062215 6.125023 5.875502 10_at
> expr_mat[1:8, 1:3]
Tarca_001_P1A01 Tarca_003_P1A03 Tarca_004_P1A04
1_at 6.062215 6.125023 5.875502
10_at 3.796484 3.805305 3.450245
100_at 5.849338 6.191562 6.550525
1000_at 3.567779 3.452524 3.316134
10000_at 6.166815 5.678373 6.185059
100009613_at 4.443027 4.773199 4.393488
100009676_at 5.836522 6.143398 5.898364
10001_at 6.330018 5.601745 6.137984
> anodat[1:8, 1:3]
V1 V2 V3
1 SampleID GA Batch
2 Tarca_001_P1A01 11 1
3 Tarca_013_P1B01 15.3 1
4 Tarca_025_P1C01 21.7 1
5 Tarca_037_P1D01 26.7 1
6 Tarca_049_P1E01 31.3 1
7 Tarca_061_P1F01 32.1 1
8 Tarca_051_P1E03 19.7 1
目标:
gene_corrs <- function(expr_mat, anno_mat){
stopifnot(ncol(expr_mat)==nrow(anno_mat))
res <- list()
lapply(colnames(expr_mat), function(x){
lapply(x, rownames(y){
if(colnames(x) %in% rownames(anno_mat)){
cor_mat <- stats::cor(y, anno_mat$GA, method = "pearson")
ncor <- ncol(cor_mat)
cmatt <- col(cor_mat)
ord <- order(-cmat, cor_mat, decreasing = TRUE)- (ncor*cmatt - ncor)
colnames(ord) <- colnames(cor_mat)
res <- cbind(ID=c(cold(ord), ID2=c(ord)))
res <- as.data.frame(cbind(out, cor=cor_mat[res]))
res <- cbind(res, cor=cor_mat[out])
res <- as.dara.frame(res)
}
})
})
return(res)
}
我打算看看每个样本中的基因如何与注释数据中相应样本的GA值相关,然后生成保持与目标观察数据高度相关的基因的子表达矩阵anodat$GA
我的尝试:
gene_corrs <- function(expr_mat, anno_mat){
stopifnot(ncol(expr_mat)==nrow(anno_mat))
res <- list()
lapply(colnames(expr_mat), function(x){
lapply(x, rownames(y){
if(colnames(x) %in% rownames(anno_mat)){
cor_mat <- stats::cor(y, anno_mat$GA, method = "pearson")
ncor <- ncol(cor_mat)
cmatt <- col(cor_mat)
ord <- order(-cmat, cor_mat, decreasing = TRUE)- (ncor*cmatt - ncor)
colnames(ord) <- colnames(cor_mat)
res <- cbind(ID=c(cold(ord), ID2=c(ord)))
res <- as.data.frame(cbind(out, cor=cor_mat[res]))
res <- cbind(res, cor=cor_mat[out])
res <- as.dara.frame(res)
}
})
})
return(res)
}
然后,我希望从上述代码中获得一个相关矩阵,并希望执行以下操作以获得过滤后的子表达式矩阵:
idx <- which( (abs(cor) > 0.8) & (upper.tri(cor)), arr.ind=TRUE)
idx <- unique(c(idx[, 1],idx[, 2])
correlated.genes <- matrix[idx, ]
idx 0.8)和(上三(cor)),arr.ind=TRUE)
idx不要让您的数据如此难以重复检查,但在抽象意义上,我会尝试以下方法:
library(matrixTests)
cors <- row_cor_pearson(expr_mat, anodat$GA)
which(cors$cor > 0.9) # to get the indeces of genes with correlation > 0.9
库(matrixTests)
cors(0.9)#获得相关度>0.9的基因指数
不要让您的数据如此难以重复检查,但在抽象意义上,我会尝试以下方法:
library(matrixTests)
cors <- row_cor_pearson(expr_mat, anodat$GA)
which(cors$cor > 0.9) # to get the indeces of genes with correlation > 0.9
库(matrixTests)
cors(0.9)#获得相关度>0.9的基因指数
谢谢,但当我将阈值设置为0.9时,就没有剩下基因(行),这是不正确的。你确定这符合基因表达数据吗?你必须选择你想要的阈值,这0.9只是一个例子。同样在执行此操作之前-确保样本名称在expr\u mat
和anodat$GA
之间匹配。根据您的示例,它们可能不匹配。谢谢,但是当我将阈值设置为0.9时,就没有剩下基因(行),这是不正确的。你确定这符合基因表达数据吗?你必须选择你想要的阈值,这0.9只是一个例子。同样在执行此操作之前-确保样本名称在expr\u mat
和anodat$GA
之间匹配。根据您的示例,它们可能不匹配。