Uploaded by Norma chen

microarray分析流程-20151129修正版

advertisement
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
Download