使用Brainarray自定义CDF规范化GSE31312的RMA中的所有NAN

使用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

我正在尝试使用来自的自定义基因水平注释CDF(芯片定义文件)文件,对一个关于弥漫性大B细胞淋巴瘤的特定基因表达数据集进行RMA规范化

不幸的是,RMA规范化表达式矩阵都是NaN,我不明白为什么

数据集(GSE31312)可在免费获得,并使用Affymetrix HG-U133 Plus 2.0阵列平台。我正在使用
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))
}