GEO数据挖掘视频笔记_version2

GEO数据挖掘

第二遍看GEO数据挖掘的视频,比之前更容易看懂很多,也有很多东西是需要重新掌握的,发现了很多第一遍完全没有听到的东西。

P1 0-项目总览及Github介绍

 # 以文件夹以及Project的形式来管理代码及文件
 # 读文献理解文献的实验设计
 # 在github中有课程的代码:https://github.com/jmzeng1314/GEO/tree/master/task1-check-specific-genes

P2 1-通用文献阅读及规律

 # 一个基因对应多个转录本,即一个基因对应多个探针,之后操作的时候要进行筛选
 # 2015年,芯片→测序仪
 # 不同的芯片的数据可以组成一个大的数据,不是重点

P3 2-了解GEO数据库

 # GEO数据库
 # GEO数据库主页:样品、平台(定制的平台可能会没有探针以及基因对应的关系)
 # ref seq ID: NM开头,可以跟基因对应
 # 芯片的基础知识
 # illumina与affymatrix的芯片是不一样的
 # GPL570: hgu133plus2是使用最多的一款芯片
 # 看GSE相关的文章

P4 3-数据下载的3种方式

# 1. Raw data下载 # 不同的芯片的处理方法不一样,不推荐,分析不好
    ## 用Read.Affy来读取,旧版的芯片
    ## 不同的版本用不同的函数来提取
# 2. Series Matrix files # 要注意是否下载完整 Linux 可以用md5检验
a=read.table('GSE42972_series_matrix.txt.gz',sep='\t',comment.char='!',fill=T,header=T,quote="")
    ## 思路:先用编辑器打开看一下,找到相应的函数来读取数据。
# 3. Geoquerry包下载:下载过来的是一个对象,可以把表达矩阵、分组信息提取出来
library(GEOquerry)
gset<-getGEO('GSE42872',destdir='.',
             AnnotGPL=F,
             getGPL=F)  #避免下载平台,因为比较大
gset

P5 4-ID转换大全

library(GEOquerry)
gset<-getGEO('GSE42872',destdir='.',
             AnnotGPL=F,
             getGPL=F)  #避免下载平台,因为比较大
gset
class(gset)
b= gset[[1]] 
a1= exprs(b) ##这个取出来的跟前面的a相同
#a=read.table('GSE42972_series_matrix.txt.gz',sep='\t',comment.char='!',fill=T,header=T,quote="") 
# rownames(a)=a[,1]
# a=a[,-1]
## GEOquerry这个包就是做了上面的这句话。

## 包装成函数  
downGSE <- function(studyID = "GSE1009", destdir = ".") {

    library(GEOquery)
    eSet <- getGEO(studyID, destdir = destdir, getGPL = F)

    exprSet = exprs(eSet[[1]])
    pdata = pData(eSet[[1]])

    write.csv(exprSet, paste0(studyID, "_exprSet.csv"))
    write.csv(pdata, paste0(studyID, "_metadata.csv"))
    return(eSet)

} 
# 使用GEOmetadb包来获取对应GEO数据的实验信息,参考
#  http://www.bio-info-trainee.com/1085.html
downGSE('GSE42872') #对多两个csv表格
## ID转换的背景知识
# 探针需要转换成基因名,多个探针可能对应同一个基因,需要策略筛选
# 1. 找到GPL平台对应的bioconductor的包
# 2. 找到GPL自己的注释
library(hugene10sttranscriptcluster.db)
?hugene10sttranscriptcluster.db
ls('package:hugene10sttranscriptcluster.db')
ids=toTable(hugene10sttranscriptclusterSYMBOL) #蛋白编码的基因就2万个左右
length(unique(ids$symbol)) #看一下有多少个基因
tail(sort(table(ids$symbol))) #看一下基因对应多个探针的后面几位
table(sort(table(ids$symbol))) #看一下基因对应的探针情况 #作者的数据可能已经把数据过滤了,所以要默认它是对的,不然要自己处理。
plot(table(sort(table(ids$symbol))))
exprSet=a1
table(rownames(exprSet))%in%ids$probe_id)
dim(exprSet) #只有经过注释的探针我们才能进行分析,这个代码用来看过滤之前的探针数目
exprSet=exprSet[rownames(exprSet)%in%ids$probe_id,]
dim(exprSet) # 看一下过滤完之后的探针数目
ids=ids[match(rownames(exprSet),ids$probe_id),]# 将ids顺序调整为与表达矩阵一样
# 为什么要顺序调整成一样,就是为了通过逻辑值来判断,一个的正确与否跟另外一个一样。
head(ids)
exprSet[1:5,1:5]
tmp=by(exprSet,ids$symbol,function(x) rownames(x)[which.max(rowMeans(x)])
#需要对表达矩阵进行分割,达到一个新的探针列表,这里取的是最大值
probes=as.character(tmp)
# 根据probe来进行过滤
dim(exprSet)
exprSet=exprSet[rownames(exprSet)%in%probes,]                                                  
dim(exprSet)                                                                

GPL找不到相对应的包的解决方法

# 参考github:https://github.com/jmzeng1314/my-R/tree/master/9-microarray-examples
gpl<- getGEO('GPL6480',destdir='.') 
colnames(Table(gpl)) ## 41108 17
head(Table(gpl))[,c(1,6,7)] # 需要自己检查,需要哪几列
write.csv(Table(gpl)[,c(1,6,7)],"GPL6480.csv")

P6 5-了解你的表达矩阵

# 使用R语言20题来进行演示
## 检验常见的基因,如内参、自己敲低或者过表处理的基因,GAPDH,ACTB的表达
## 查看分布图,各个样本的表达的boxplot
## PCA图与Hclust图
plot(hclust(dist(t(exprSet))))
# 代码在R语言的20题,这边要对代码进行修改以及合并。

P7 6-差异分析

# 参考微信文章《用Limma对芯片数据做差异分析》
library(limma)
design<- model.matrix(~0+factor(group_list))#构建design矩阵,分组矩阵
# 即tmp=data.frame(case=c(0,0,0,1,1,1),control=c(1,1,1,0,0,0)),样本多就需要用之前的来进行操作。
colnames(design)=levels(factor(group_list))#列名是分组信息,并且赋值
rownames(design)=colnames(exprSet) #样品名是design的行名
## 构建比较矩阵
contrast.matrix<-makeContrasts(paste0(unique(group_list),collpase='-'),levels=design) 
contrast.matrix
# paste0(unique(group_list),collpase='-'),知道是谁跟谁比,case比control,还是control比case,a/b → a=1,b=-1
## 进行分析
fit<- lmFit(exprSet,design)
fit2<- contrasts.fit(fit,contrast.matrix)
fit2<- eBayes(fit2)
tempOutpu=topTable(fit2,coef=1,n=Inf)
nrDEG=na.omit(tempOutput)
head(nrDEG)
## 画热图
library(pheatmap)
choose_gene=head(rownames(nrDEG),25)
choose_matrix=exprSet[choose_gene,]
choose_matrix=t(scale(t(choose_matrix)))
pheatmap(choose_matrix)
# 参考 《差异分析 一文不够》

P8 7-火山图及热图制作及美化

# volcano plot
colnames(nrDEG)
## plot(nrDEG$logFC,-log10(nrDEG$P.value))
## 可以google好看的火山图代码
# 富集分析,对上调下调基因进行注释,知道这些基因是干什么用的。
# 参考微信文章 《结果注释一文就够》
# 你的通路有多少基因,你的差异基因中有多少被抽中了
# 1000/20000,基因被抽中的概率是1/20,cell cycle的基因假设有100个,那么被抽中的个数应该是5个,但是如果抽到了20个,说明cell cycle这个通路发生了变化。
## KEGG 分析
library(clusterProfiler)
## 需要将基因转变为ENTREZID
gene.df<- bitr(gene,fromType='SYMBOL',
              toType=c('ENSEMBL',"ENTREZID"),
              OrgDb=org.Hs.eg.db)
head(gene.df)
## ENTREZID 
kk<-enrichKEGG(gene=gene.df$ENTREZID,
              organism='hsa',
              pvalueCutoff=0.05)
head(kk)[,1:6]
## 拿DNA replication这个通路距离,它的BgRatio为36/7431,而例子中18/425,差异基因中富集了18个,说明这个通路被明显影响了
vignette('clusterProfiler') #查看包的说明书,需要从头看到尾
## GO analysis

P9 8-KEGG-GO等数据库的注释及GSEA分析

# KEGG,GO的缺点
# 超几何分布检验的弊端,无法考量每一个基因的本身作用,事实上基因是有重要与不重要的区分的
# GSEA分析
data(geneList,package='DOSE')
geneList
boxplot(geneList) #差异基因的LogFC,要看包的说明书,知道是哪里来的geneList
nrDEG$logFC
geneList=nrDEG$logFC
names(geneList)=rownames(nrDEG)

## 会报错,需要转换ID
gene.df<-bitr(names(geneList),fromType='SYMBOL',
              toType=c('ENSEMBL','ENTREZID'),
              OrgDb=org.Hs.eg.db)
head(gene.df)
tmp=data.frame(SYMBOL=names(geneList),
              logFc=as.numeric(geneList))
tmp=merge(tmp,gene.df,by='SYMBOL')
geneList=tmp$logFc
names(geneList)=gene.df$ENREZID
geneList=sort(geneList,decreasing=T)
## 主要是为了满足kk2的输入文件的条件

kk2<- gseKEGG(geneList =geneList,
             organism ='hsa',
             nPerm =1000,
             minGSSize=120,
             pvalueCutoff=0.05,
             verbose= FALSE)
head(kk2)
## 需要自己调整,将自己的数据调整别人轮子需要的数据。
## GSEA软件需要制作练个输入文件

P10 9- 收尾的几点建议

# 看github的代码

P11 10- 批量生存分析代码大放送

# 人群太大了,异质性太高,没有一个决定性的分子能够决定死与活,病人情况太复杂,生存分析只是其中的一种。
# 参考公众号《生信技能树 生存分析》
# 跑R语言的习题
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容