MICROARRAY ANALYSIS 1 数据获取 GEO 数据库数据下载 2.处理 2.1 以 GSE45642 为例的处理流程: 前言-- GSE45642 简介 2.1.0 IMAGE FILE 若提供了 image file 应对其进行观察,看是否有因实验操作不当而产生的气泡等 2.1.1 EXPRESSION CONSOLE 前期准备:1.注册账号 Email:moonsophy@126.com Password: jp+数字+标点 2.下载软件 expression console 3.下载相应的 annotation file 【HG-U133A,根据你具体分析的芯片类型,下载到你想要 存储的工作路径,并记录工作路径】 4. 到 以 下 网 址 【 http://bioinfo.psych.uic.edu/SMP/SNPsInProbes.jsp 】 下 载 相 应 的 Annotation file, 根据所处理的样本涉及的种族,芯片类型,下载相应的 library 文件,并替换 上述步骤 3 中下载的文件中相同后缀的文件;需要注意的是,该步骤是为了过滤掉含有 SNP 的探针,从尚未进行 summary 的探针中,将含有 SNP 的探针去掉,保证得到的 Probe set 的数 据并没有 SNP 的影响。网站中 CEN 表示欧美白人,CHB-JBP 表示亚洲人,YRI 表示非洲人,若 所处理的样本中为单一人种,则下载该人种的相应文件,替换掉 3 中的相应文件即可;若所 处理的样本中含有不同种族的样本,而不同种族的样本数目相当的话,有两种处理方法:其 一, 将样本根据人种分开 分别进行处理,但是会产生不同种族的样本 summary 的结果中 probe set ID 之间有差异,再将数据整合到一起的时候会出现有一些探针是空的现象,必须要取不同 种族中共同有的探针,即取交集;其二,利用” Common SNP 135”—这是 DB SNP 的 135 版本, 可以过滤掉不同人种的含 SNP 的探针。 5.将下载的原始数据解压 载入数据:New study > add intensity files 进行处理:run analysis > RMA > MAS5 将.cel 文件全选载入 得到表达量的信息 得到 detection p-value 补充:RMA 和 MAS5 的原理,目的,区别?? 输出结果:Edit > probe level summarizations Report Options > 选择 signal 和 detection p-value Export > Export probe set results (Pivot table) to TXT… 【可用 excel 打开查看】 补充:现在大部分研究都用 RMA 进行分析后继续走下面的流程,不再使用 MAS5 进行 p 值过滤。 2.1.2 数据过滤 补充:先进行数据过滤还是先分批次再进行数据过滤? 答案: 先进行数据过滤再分批次。 陈:我开始觉得两种过滤方法都可以。但是先分批次过滤有几个缺点,1)有时候数据批次数目很多, 每批次样本量较少,这样有两三个样本的探针不好就容易被剔除;2)分批次过滤后数据的整合是个 问题,如前所述,如果一个批次的某个探针因为很少样本质量不佳被剔除,跟其他批次整合时,就 算其他批次该探针质量很好,也因为需要交集,无法保留,造成探针数量的减少; 刘:从数据质量这个核心出发点,不管数据来自于同一个批次还是不同批次,同一个实验室数据还 是不同的时间点,数据的统计学 power 来源于实验的质量,而不是样本的多少 ,一般样本过滤掉的 很少,而探针的质量好坏的标准是固定的。此外,考虑到进行批次也应该基于质量好的数据,所以, 先进行数据过滤再分批次较好, 1. 去掉含 SNP 的探针 在 Expression Console 跑数据前进行过滤,见 2.1.1 前期准备 4 。 2. P<0.06 的数据量≥80% 选择 P<0.06 的原因是,MSA5 对于其得到的 detection p-value,认为 present < 0.04, marginal 0.04 ~ 0.06, absent > 0.06。 讨论:先过滤探针还是先过滤样本 ? 修正:2015-11-29 对于表达芯片数据,由于有一些基因(40%)可能并不表达,所以对于探针的过滤是 需要考虑的主要的因素【先做探针过滤后,剩下的基因可以认为是基本表达的基因】。 而对于样本 的过滤,一般是采用 PCA 或其他的找 outlier 的方式剔除掉那些与大部分样本有较大差异的少数样本。 【而甲基化芯片,SNP 芯片就需要先过滤样本】 以前讨论结果:首先 probe 比 sample 要多得多,Probe 22284 sample 670 ,在不进行过滤的情况 下,同时用 countif 计算每行每列的 P<0.06 的数据量,并进行统计,满足>80%的样本 p<0.06 的探针 有 7649 个, 而满足>80%的探针 p<0.06 的样本有 0 个, 这说明:不合格的探针引入更多的垃圾 ?Probe 的过滤实际上质量的好坏标准是比较固定的,不管他是来自于不同的实验室还是不同的时间做的, 标准较为固定。 使用 Excel 的 COUNTIF(行/列, “<0.06”)计算行/列中 P<0.06 的数目,然后进行排序,以数据量 80%为界, 若该行/列数据的 P<0.06 的数据量<80% 则过滤掉该组数据 过滤探针: 使得>670*0.8=536 都满足 p<0.06 探针数有 7649+“=536”有 7663 探针 过滤样本: 在不过滤掉探针时 用 COUNTIF 计算列 P<0.06 的量,共 22284 探针,满足>80%的 sample=0 利用过滤掉探针后,每列共 7663 探针,满足>80*7663 即 6130 的 sample=655,即不符合要求的有 15 个 不符合要求的样本如下: 1) GSM1124312_I_133A_125_CB_1_C 2) GSM1124382_D_133A_110_DLPFC_0_C 3) GSM1124392_D_133A_112_DLPFC_1_C 4) GSM1124444_I_133A_130_DLPFC_1_C 5) GSM1124521_D_133A_47_HC_1_C 6) GSM1124531_D_133A_35_HC_1_C 7) GSM1124537_D_133A_112_HC_1_C 8) GSM1124583_M_133A_112_HC_1_C 9) GSM1124686_M_133A_45_nAcc_1_C 10) GSM1124689_M_133A_44_nAcc_1_C 11) GSM1124694_M_133A_40_nAcc_1_C 12) GSM1124716_M_133A_43_nAcc_1_C 13) GSM1124718_M_133A_36_nAcc_0_C 14) GSM1124720_M_133A_111_nAcc_0_C 15) GSM1124722_M_133A_106_nAcc_1_C 过滤后得到的文件为:20150625-expr-RMA-filter.txt 包含 7663 probe 655 sample 3.去掉 AFFX 开头的做质控的探针 手动:在 Excel 中按照 probe set ID 进行排序,使得 AFFX 聚集在一起,然后删除掉这些探针的信息。 R:用 genefilter 包中 nsFilter 函数,但要注意参数设置 结果: probe 7633 , sample 655 输出:20150625-expr-RMA-filter2.txt 4.去掉 CROSSHYB - TYPE =3 的探针 在芯片的 annotation file 中 crosshyb-type 列代表的信息---crosshyb_type' column labels probesets as either: 1 (unique – perfectly match only the target sequence), 2 (similar – perfectly match more than one sequence) 3 (mixed – perfectly or partially match more than one sequence) 所以需要根据该信息将 crosshyb-type=3 探针过滤掉 5.去掉 GENE - ASSIGNEMENT 为空的数据 函数 6. IMPUTE MISSING VALUE 由于有一些函数在运算过程中,不允许有空值,需进行补空,详情见 2.1.3 7.PCA 主成分分析 7.补充: NS F ILTER 的功能的启示 补充:nsFilter(表达数据, require.entrez=TRUE, require.GOBP=FALSE, require.GOCC=FALSE, require.GOMF=FALSE, require.CytoBand=FALSE, remove.dupEntrez=TRUE, var.func=IQR, var.cutoff=0.5, var.filter=TRUE, filterByQuantile=TRUE, feature.exclude="^AFFX", ...) 解释: 刘:去看看 nsFilter 的 R code 是怎么写的,看自己能否写一个 类似的 Code 把数据过滤的过程 前面 的做了。 2.1.3 批次校正 读取文件,检查是否有 missing value > all<-read.table("20150707-expr-RMA-filter.txt",quote="",sep="\t",header=TRUE) > dim(all) [1] 7647 656 >is.na(all) > sum(is.na(all)) [1] 0 missing value 处理方法: 法一 x[is.na(x)]=0.0001 就是把 missing value 替换成 0.0001; 法二 用 impute 把 missing value 按照数据分布补回来 ,数值大小与缺失值周围数值大小有关; Impute.knn()【用法:http://www.bioconductor.org/packages/release/bioc/html/impute.html 】 还有其他方法 制作 batch 文件【利用 excel】: 1) 复制 sample 名 2) 转置粘贴到新的工作表【使得原本一行的数据放到一列】 3) 观察 sample 名,利用数据-分列-分隔符选择“_”进行分列 4) 删除其他信息,保存为.txt 文件 文件名:20150702-batch.txt 根据 batch 信息,将表达数据分开【利用 excel】 1) Ctrl+A 全选过滤后的数据 2) 转置粘贴到新的工作表-“t-expr” 3) 复制 sample ID 至新的工作表”batch”,利用数据-分列-分隔符选择“_”进行分列,复制 batch 列 4) 在 t-expr 表 sample ID 列后插入列,粘贴 batch 列; 5) 对 batch 列进行筛选; 6) 以 D 为例 , 复 制所 有 batchD, 转 置 粘贴 到 新 的 工 作 表“ D ” ,删 除 batch 行 ,保 存为 “ 20150707-expr-batch-D.txt ” , 以 此 类 推 , 保 存 为 “ 20150707-expr-batch-I.txt ” , “20150707-expr-batch-M.txt” 7) 由于读取数据进行批次矫正时,combat 函数报错,mode(data)发现数据的格式为” character”,因 为 probe set ID 列的信息的问题,使得读入的数据不是数值型,所以决定每个文件中删除第一 列,保存为:20150708-expr-batch-D.txt; 20150708-expr-batch-I.txt;20150708-expr-batch-M.txt。 并将 probe set ID 信息保存下来,供批次矫正后使用。 missing value 处理方法: 法一 x[is.na(x)]=0.0001 就是把 missing value 替换成 0.0001; 法二 用 impute 把 missing value 按照数据分布补回来 ,数值大小与缺失值周围数值大小有关; Impute.knn()【用法:http://www.bioconductor.org/packages/release/bioc/html/impute.html 】 还有其他方法 进行批次矫正—“20150708-combat.csv” #loading data Data1<-as.matrix(read.table("20150708-expr-batch-D.txt", header=TRUE, sep = "\t", quote=" ",as.is = TRUE)) Data2<-as.matrix(read.table("20150708-expr-batch-I.txt.", header=TRUE, sep = "\t", quote=" ",as.is = TRUE)) Data3<-as.matrix(read.table("20150708-expr-batch-M.txt.", header=TRUE, sep = "\t", quote=" ", as.is = TRUE)) #extracting expression values Data=cbind(Data1,Data2,Data3) dim(Data) [1] 7647 655 #impute missing values Sum(is.na(Data)) [1] 0 #若返回结果≠0,则需 impute missing values, #Library(impute) #data=impute.knn(Data) #Batch correction(校正批次效应) source("http://bioconductor.org/biocLite.R") biocLite("sva") library(sva) daTa=as.matrix(read.csv(file="Combine.csv",header=T,row.names=1, sep=",")) batch=c(rep(1,223),rep(2,145),rep(3,287)) ComBatBatch=ComBat(dat=daTa, batch=batch, mod=NULL, par.prior=TRUE, prior.plots=FALSE) write.csv(ComBatBatch,file="20150708-combat.csv") 将得到的批次矫正的结果,在 excel 中将 probe set ID 补充上,然后排序, 得到 7633 probes, 655samples 保存至:20150708-combat.csv