分析芯片数据并提取差异表达基因

作者: 邱俊辉 | 来源:发表于2018-11-16 12:10 被阅读16次

分析基因芯片的数据,提取出差异表达的基因
这次试验的数据来源于文献:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE20986
文献的目的是比较 非传代,增殖的HUVEC(人脐静脉血管内皮细胞)和iris(虹膜),retina(视网膜),choroid(脉络膜)的基因表达谱,研究眼部疾病的病理生理机制,看看能否用HUVEC 细胞替代其他细胞作为研究眼科疾病的样本

1.下载芯片数据并解压

#设置工作路径
> setwd("C:\\Users\\18019\\Desktop\\xinpian")
#安装GEOquery包并下载原始数据
>source("http://www.bioconductor.org/biocLite.R")
>biocLite("GEOquery")
> library(GEOquery)
> getGEOSuppFiles("GSE20986")#下载数据
trying URL 'https://ftp.ncbi.nlm.nih.gov/geo/series/GSE20nnn/GSE20986/suppl//GSE20986_RAW.tar?tool=geoquery'
Content type 'application/x-tar' length 56360960 bytes (53.8 MB)
> list.files()#显示文件
[1]"GSE20986"
#解压文件到data文件夹
> setwd("GSE20986")
> list.files()
[1] "data"             "GSE20986_RAW.tar"
> untar("GSE20986_RAW.tar",exdir = "data")
> setwd("data")
> list.files()
 [1] "GSM524662.CEL.gz" "GSM524663.CEL.gz" "GSM524664.CEL.gz"
 [4] "GSM524665.CEL.gz" "GSM524666.CEL.gz" "GSM524667.CEL.gz"
 [7] "GSM524668.CEL.gz" "GSM524669.CEL.gz" "GSM524670.CEL.gz"
[10] "GSM524671.CEL.gz" "GSM524672.CEL.gz" "GSM524673.CEL.gz"
> cels<-list.files()
> sapply(cels, gunzip)
GSM524662.CEL.gz GSM524663.CEL.gz GSM524664.CEL.gz GSM524665.CEL.gz 
        13555726         13555055         13555639         13560122 
GSM524666.CEL.gz GSM524667.CEL.gz GSM524668.CEL.gz GSM524669.CEL.gz 
        13555663         13557614         13556090         13560054 
GSM524670.CEL.gz GSM524671.CEL.gz GSM524672.CEL.gz GSM524673.CEL.gz 
        13555971         13554926         13555042         13555290 

> list.files()
 [1] "GSM524662.CEL" "GSM524663.CEL" "GSM524664.CEL" "GSM524665.CEL"
 [5] "GSM524666.CEL" "GSM524667.CEL" "GSM524668.CEL" "GSM524669.CEL"
 [9] "GSM524670.CEL" "GSM524671.CEL" "GSM524672.CEL" "GSM524673.CEL"

2.用simpleaffy读取数据并标准化

使用read.affy函数读取cel文件需要两个输入
第一个输入是一个文本文档,能够被读取成数据框,第一列无列名,为cel文件名称,第二列为样品标签,可以在文献上面找到
第二个为文件所在的路径
第一个输入我们直接在data文件夹里编辑文本,命名为phenodata.txt。列与列之间用分隔符隔开 如图



然后就可以载入数据并标准化

>library(simpleaffy)
> celfiles<-read.affy(covdesc = "phenodata.txt",path=".")
> celfiles#查看一下是否读取成功

AffyBatch object
size of arrays=1164x1164 features (22 kb)
cdf=HG-U133_Plus_2 (54675 affyids)
number of samples=12
number of genes=54675
annotation=hgu133plus2
notes=
Warning messages:
1: replacing previous import ‘AnnotationDbi::tail’ by ‘utils::tail’ when loading ‘hgu133plus2cdf’ 
2: replacing previous import ‘AnnotationDbi::head’ by ‘utils::head’ when loading ‘hgu133plus2cdf’ 
#用GC-RMA算法进行标准化
> celfiles.gcrma<-gcrma(celfiles)
Adjusting for optical effect............Done.
Computing affinitiesLoading required package: AnnotationDbi
Loading required package: stats4
Loading required package: IRanges
Loading required package: S4Vectors

Attaching package: ‘S4Vectors’

The following object is masked from ‘package:base’:

    expand.grid



Attaching package: ‘IRanges’

The following object is masked from ‘package:simpleaffy’:

    members

The following object is masked from ‘package:grDevices’:

    windows

.Done.
Adjusting for non-specific binding............Done.
Normalizing
Calculating Expression
> celfiles.gcrma#查看一下标准化后的数据,这里可以明显看到数据集已经是ExpressionESet了,不是未标准化的AffyBatch
ExpressionSet (storageMode: lockedEnvironment)
assayData: 54675 features, 12 samples 
  element names: exprs 
protocolData
  sampleNames: GSM524662.CEL GSM524663.CEL ... GSM524673.CEL
    (12 total)
  varLabels: ScanDate
  varMetadata: labelDescription
phenoData
  sampleNames: GSM524662.CEL GSM524663.CEL ... GSM524673.CEL
    (12 total)
  varLabels: sample Target
  varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'
Annotation: hgu133plus2 

3.数据芯片可视化

在进行下一步的差异分析前,我们要对标准化后的数据进行质量检查

#做箱线图对比标准前后数据
#设置颜色
> library(RColorBrewer)
> cols<-brewer.pal(8,"Set1")
#做箱线图
> boxplot(celfiles,col=cols)
> library(affyPLM)#做标准化后的图要载入affyPLM包,以便解析标准化后的数据
载入需要的程辑包:gcrma
载入需要的程辑包:preprocessCore
> boxplot(celfiles.gcrma,col=cols)

如图 标准化之前的箱线图



标准化之后的箱线图


#做密度曲线图
> boxplot(celfiles.gcrma,col=cols)
> hist(celfiles,col=cols)
> hist(celfiles.gcrma,col=cols)

如图,标准化之前的密度曲线图



标准化之后的密度曲线图


#对单个芯片进行可视化
> celfiles.qc<-fitPLM(celfiles)
> image(celfiles.qc,which=1,add.lenge=TRUE)
> image(celfiles.qc,which=6,add.lenge=TRUE)

4.确认完数据质量后,就可以开始过滤探针了

探针与目标之间一定存在着非特异性结合,所以所有的探针均会产生信号。
如果不加以过滤,认为这些探针对应的基因都表达,即不符合事实,也会对后续的分析产生影响。因此,过滤掉表达量低的探针是十分必要的。
rnsFilter() 函数提供一站式的探针过滤,能够一步对Expression Set的探针进行过滤,返回一个list。list中的eset为过滤后的Expression Set, filter.log为每一步过滤到多少探针的记录。nsFilster也可以用于oligo包读取的对象
常用参数:
(1)require.entrez 若为TRUE,过滤掉没有ENTREZ ID的探针。默认为TRUE,一般设为FALSE
(2)remove.dupEntrez 若为TRUE,当几个探针对应统同一ENTREZ ID的时候,留下 var.func 值最大的探针,其余过滤。默认为TRUE,一般设为FALSE
(3)var.func 用于过滤的统计参数。默认为IQR
(4)var.cutoff 截断值。默认为0.5,即过滤到50%的基因。

> celfiles.filtered<-nsFilter(celfiles.gcrma,require.entrez = FALSE,remove.dupEntrez = FALSE)
> celfiles.filtered$filter.log
$`numLowVar`
[1] 27307

$feature.exclude
[1] 62

看出有 27307 个探针位点因为无明显表达差异(LowVar)被过滤掉,有 62 个探针位点因为是内参而被过滤掉。

5.用limma包开始差异分析

1.提取样品信息

>library(limma)
>sample<-celfiles.gcrma$Target
> design<-model.matrix(~0+sample)
>colnames(design) <- c("choroid", "huvec", "iris", "retina")
> design
           choroid   huvec      iris      retina
1              0           0          1            0
2              0           0          0            1
3              0           0          0            1
4              0           0          1            0
5              0           0          0            1
6              0           0          1            0
7              1           0          0            0
8              1           0          0            0
9              1           0          0            0
10             0           1          0            0
11             0           1          0            0
12             0           1          0            0

2.构建差异分析的比对矩阵
根据文献意思,我们将HUVEC分别与iris,retrina,choroid分别进行比对

> contrasts.matrix<-makeContrasts(huvec_choroid = huvec - choroid, huvec_retina = huvec - retina, huvec_iris <- huvec - iris, levels=design)
> contrasts.matrix
         Contrasts
Levels    huvec_choroid huvec_retina huvec_iris <- huvec - iris
  choroid            -1            0                          0
  huvec               1            1                          1
  iris                0            0                         -1
  retina              0           -1                          0

3.开始差异分析

#将线性模型拟合到过滤后的表达数据集上
> fit<-lmFit(celfiles.filtered$eset,design)
#将比对矩阵与线性模型拟合,比较不同细胞系表达数据
> huvec_fit<-contrasts.fit(fit,contrasts.matrix)
 # 使用经验贝叶斯算法计算差异表达基因的显著性
> huvec_ebFit <- eBayes(huvec_fit)
# coef=1 是 huvec_choroid 比对矩阵, coef=2 是 huvec_retina 比对矩阵,依此类推
> topTable(huvec_ebFit,number = 10,coef = 1)
                logFC  AveExpr         t      P.Value    adj.P.Val        B
204779_s_at  7.367790 4.171707  72.77347 3.284937e-15 8.969850e-11 20.25762
207016_s_at  6.936667 4.027733  57.39252 3.694641e-14 5.044293e-10 19.44987
209631_s_at  5.192949 4.003992  51.24892 1.170273e-13 1.065182e-09 18.96660
242809_at    6.433238 4.168870  48.51842 2.043082e-13 1.394710e-09 18.70852
205893_at    4.480331 3.543714  40.56477 1.261400e-12 6.888757e-09 17.75050
227377_at    3.672710 3.209739  36.08942 4.132286e-12 1.880603e-08 17.03075
204882_at   -5.353547 6.513690 -34.70646 6.141288e-12 2.395629e-08 16.77396
38149_at    -5.054267 6.483784 -31.45817 1.661577e-11 5.282891e-08 16.09358
205576_at    6.586393 4.139624  31.31294 1.741230e-11 5.282891e-08 16.06036
205453_at    3.624587 3.210563  30.74481 2.095602e-11 5.722251e-08 15.92787
> huvec_choroid<-topTable(huvec_ebFit,coef = 1)
> huvec_retina<-topTable(huvec_ebFit,coef = 2)
> huvec_iris<-topTable(huvec_ebFit,coef = 3)

6.获取差异基因的注释并输出

#安装探针注释的包,可以在文献中找到
> biocLite("hgu133plus2.db")
> library(hgu133plus2.db)
#载入注功能的包
> library(annotate)
#分别对三组差异表达的探针进行注释
> gene.symbols1 <- getSYMBOL(rownames(huvec_choroid), "hgu133plus2")
> gene.symbols2 <- getSYMBOL(rownames(huvec_retina), "hgu133plus2")
> gene.symbols3 <- getSYMBOL(rownames(huvec_iris), "hgu133plus2")
#将差异基因与值是结合并输出
> results<-cbind(gene.symbols1,huvec_choroid)
> head(results)
            gene.symbols1    logFC  AveExpr        t      P.Value    adj.P.Val        B
204779_s_at         HOXB7 7.367790 4.171707 72.77347 3.284937e-15 8.969850e-11 20.25762
207016_s_at          <NA> 6.936667 4.027733 57.39252 3.694641e-14 5.044293e-10 19.44987
209631_s_at          <NA> 5.192949 4.003992 51.24892 1.170273e-13 1.065182e-09 18.96660
242809_at          IL1RL1 6.433238 4.168870 48.51842 2.043082e-13 1.394710e-09 18.70852
205893_at           NLGN1 4.480331 3.543714 40.56477 1.261400e-12 6.888757e-09 17.75050
227377_at         IGF2BP1 3.672710 3.209739 36.08942 4.132286e-12 1.880603e-08 17.03075
> write.csv(results,file="huvec_choroid.csv")
> results<-cbind(gene.symbols2,huvec_retina)
> write.csv(results,file="huvec_retina.csv")
> results<-cbind(gene.symbols3,huvec_iris)
> write.csv(results,file = "huvec_iris.csv")

到这里差异表达基因的提取和注释就完成了

相关文章

网友评论

    本文标题:分析芯片数据并提取差异表达基因

    本文链接:https://www.haomeiwen.com/subject/swwlfqtx.html