Bioconductor分析芯片數(shù)據(jù)并提取差異表達基因

分析基因芯片的數(shù)據(jù),提取出差異表達的基因
這次試驗的數(shù)據(jù)來源于文獻:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE20986
文獻的目的是比較 非傳代,增殖的HUVEC(人臍靜脈血管內(nèi)皮細胞)和iris(虹膜),retina(視網(wǎng)膜),choroid(脈絡膜)的基因表達譜,研究眼部疾病的病理生理機制,看看能否用HUVEC 細胞替代其他細胞作為研究眼科疾病的樣本

1.下載芯片數(shù)據(jù)并解壓

#設置工作路徑
> setwd("C:\\Users\\18019\\Desktop\\xinpian")
#安裝GEOquery包并下載原始數(shù)據(jù)
>source("http://www.bioconductor.org/biocLite.R")
>biocLite("GEOquery")
> library(GEOquery)
> getGEOSuppFiles("GSE20986")#下載數(shù)據(jù)
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讀取數(shù)據(jù)并標準化

使用read.affy函數(shù)讀取cel文件需要兩個輸入
第一個輸入是一個文本文檔,能夠被讀取成數(shù)據(jù)框,第一列無列名,為cel文件名稱,第二列為樣品標簽,可以在文獻上面找到
第二個為文件所在的路徑
第一個輸入我們直接在data文件夾里編輯文本,命名為phenodata.txt。列與列之間用分隔符隔開 如圖



然后就可以載入數(shù)據(jù)并標準化

>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#查看一下標準化后的數(shù)據(jù),這里可以明顯看到數(shù)據(jù)集已經(jīng)是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.數(shù)據(jù)芯片可視化

在進行下一步的差異分析前,我們要對標準化后的數(shù)據(jù)進行質(zhì)量檢查

#做箱線圖對比標準前后數(shù)據(jù)
#設置顏色
> library(RColorBrewer)
> cols<-brewer.pal(8,"Set1")
#做箱線圖
> boxplot(celfiles,col=cols)
> library(affyPLM)#做標準化后的圖要載入affyPLM包,以便解析標準化后的數(shù)據(jù)
載入需要的程輯包: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.確認完數(shù)據(jù)質(zhì)量后,就可以開始過濾探針了

探針與目標之間一定存在著非特異性結(jié)合,所以所有的探針均會產(chǎn)生信號。
如果不加以過濾,認為這些探針對應的基因都表達,即不符合事實,也會對后續(xù)的分析產(chǎn)生影響。因此,過濾掉表達量低的探針是十分必要的。
rnsFilter() 函數(shù)提供一站式的探針過濾,能夠一步對Expression Set的探針進行過濾,返回一個list。list中的eset為過濾后的Expression Set, filter.log為每一步過濾到多少探針的記錄。nsFilster也可以用于oligo包讀取的對象
常用參數(shù):
(1)require.entrez 若為TRUE,過濾掉沒有ENTREZ ID的探針。默認為TRUE,一般設為FALSE
(2)remove.dupEntrez 若為TRUE,當幾個探針對應統(tǒng)同一ENTREZ ID的時候,留下 var.func 值最大的探針,其余過濾。默認為TRUE,一般設為FALSE
(3)var.func 用于過濾的統(tǒng)計參數(shù)。默認為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 個探針位點因為是內(nèi)參而被過濾掉。

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.構(gòu)建差異分析的比對矩陣
根據(jù)文獻意思,我們將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.開始差異分析

#將線性模型擬合到過濾后的表達數(shù)據(jù)集上
> fit<-lmFit(celfiles.filtered$eset,design)
#將比對矩陣與線性模型擬合,比較不同細胞系表達數(shù)據(jù)
> huvec_fit<-contrasts.fit(fit,contrasts.matrix)
 # 使用經(jīng)驗貝葉斯算法計算差異表達基因的顯著性
> 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")
#將差異基因與值是結(jié)合并輸出
> 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")

到這里差異表達基因的提取和注釋就完成了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容