使用Brainarray自定义CDF规范化GSE31312的RMA中的所有NAN
我正在尝试使用来自的自定义基因水平注释CDF(芯片定义文件)文件,对一个关于弥漫性大B细胞淋巴瘤的特定基因表达数据集进行RMA规范化 不幸的是,RMA规范化表达式矩阵都是NaN,我不明白为什么 数据集(GSE31312)可在免费获得,并使用Affymetrix HG-U133 Plus 2.0阵列平台。我正在使用使用Brainarray自定义CDF规范化GSE31312的RMA中的所有NAN,r,normalization,bioinformatics,bioconductor,R,Normalization,Bioinformatics,Bioconductor,我正在尝试使用来自的自定义基因水平注释CDF(芯片定义文件)文件,对一个关于弥漫性大B细胞淋巴瘤的特定基因表达数据集进行RMA规范化 不幸的是,RMA规范化表达式矩阵都是NaN,我不明白为什么 数据集(GSE31312)可在免费获得,并使用Affymetrix HG-U133 Plus 2.0阵列平台。我正在使用affy包执行RMA规范化 由于问题是特定于数据集的,因此,不幸的是,以下用于重现问题的R代码相当麻烦(2GB下载,8.8GB解包) 设置工作目录 setwd("~/Desktop/GE
affy
包执行RMA规范化
由于问题是特定于数据集的,因此,不幸的是,以下用于重现问题的R代码相当麻烦(2GB下载,8.8GB解包)
设置工作目录
setwd("~/Desktop/GEO")
加载所需的包。取消注释以安装软件包
#source("http://bioconductor.org/biocLite.R")
#biocLite(pkgs = c("GEOquery", "affy", "AnnotationDbi", "R.utils"))
library("GEOquery") # To automatically download the data
library("affy")
library("R.utils") # For file handling
将阵列数据下载到工作目录
files <- getGEOSuppFiles("GSE31312")
解压所有的.gz文件
gz.files <- list.files("CEL", pattern = "\\.gz$",
ignore.case = TRUE, full.names = TRUE)
for (file in gz.files)
gunzip(file, skip = TRUE, remove = TRUE)
cel.files <- list.files("CEL", pattern = "\\.cel$",
ignore.case = TRUE, full.names = TRUE)
使用和不使用自定义CDF执行RMA规范化
affy.rma <- justRMA(filenames = cel.files, verbose = TRUE)
ensg.rma <- justRMA(filenames = cel.files, verbose = TRUE,
cdfname = "HGU133Plus2_Hs_ENSG")
有趣的是,在使用标准CDF时,exprs(affy.rma)
中有相当多的NAN
# Show some NaNs
na.rows <- apply(is.na(exprs(affy.rma)), 1, any)
exprs(affy.rma)[which(na.rows)[1:10], 1:4]
# A particular bad probeset:
exprs(affy.rma)["1553575_at", ]
# There are relatively few NaNs in total (but the really should be none)
sum(is.na(exprs(affy.rma))) # == 12305
# Probesets of with all NaNs
sum(apply(is.na(exprs(affy.rma)), 1, all))
通过查看head(X)
,GSM776462.CEL似乎都是NAN。事实上,它几乎是:
sum(!is.nan(X$GSM776462.CEL)) # == 18
20009年中只有18个不是NaN。接下来,我计算出现在其他地方的NaN的数量
sum(is.na(X[, -grep("GSM776462.CEL", colnames(X))])) # == 0
也就是0。因此,GSM776462.CEL似乎是罪魁祸首
但常规的CDF注释不会带来任何问题:
affy <- justRMA(filenames = "CEL/GSM776462.CEL")
any(is.nan(exprs(affy))) # == FALSE
没有找到
NA
s或NaN
s。如果一天左右后这里没有答案,请尝试邮件列表,有人会提供提示答案。如果您得到关于Bioconductor的答案,请将答案张贴在这里,以供子孙后代和我的大脑使用!感谢you@MartinMorgan在Bioconductor邮件列表中只参考此页可以吗?或者我应该或多或少地复制整个帖子吗?@AEBilgrau引用该页面很好(甚至更好)
ensg <- vector("list", length(cel.files)) # Initialize a list
names(ensg) <- basename(cel.files)
for (file in cel.files) {
ensg[[basename(file)]] <- justRMA(filenames = file, verbose = TRUE,
cdfname = "HGU133Plus2_Hs_ENSG")
cat("File", which(file == cel.files), "done.\n\n")
}
# Extract the expression matrices for each file and combine them
X <- as.data.frame(do.call(cbind, lapply(ensg, exprs)))
sum(!is.nan(X$GSM776462.CEL)) # == 18
sum(is.na(X[, -grep("GSM776462.CEL", colnames(X))])) # == 0
affy <- justRMA(filenames = "CEL/GSM776462.CEL")
any(is.nan(exprs(affy))) # == FALSE
# Trying with all other CEL than GSM776462.CEL
cel.files2 <- grep("GSM776462.CEL", cel.files, invert = TRUE, value = TRUE)
affy.rma.no.776462 <- justRMA(filenames = cel.files2)
ensg.rma.no.776462 <- justRMA(filenames = cel.files2, verbose = TRUE,
cdfname = "HGU133Plus2_Hs_ENSG")
sum(is.na(exprs(affy.rma.no.776462))) # == 12275
sum(is.na(exprs(ensg.rma.no.776462))) # == 0
for (file in cel.files) {
affybtch <- suppressWarnings(read.affybatch(filenames = file))
tmp <- exprs(affybtch)
cat(file, "done.\n")
if (any(is.na(tmp)))
stop(paste("NAs or NaNs are present in", file))
}