R语言做生信lncRNA生信

190303 GEO数据分析文章热图重现

2019-03-04  本文已影响44人  森尼啊

文章Tinagl1 Suppresses Triple-negative Breast Cancer Progression by Simultaneously Targeting Integrin/FAK and EGFR Signaling Pathways,根据文章找到GSE号: GSE99507,
实验设计:Tinagl1过表达三个样本+正常对照三个样本。
画出来的图如下:

heatmap.png

1. 安装包,并准备工作

install.packages("GEOquery")
Installing package into ‘/usr/local/lib/R/3.5/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  package ‘GEOquery’ is not available (for R version 3.5.0)
source("[http://bioconductor.org/biocLite.R](http://bioconductor.org/biocLite.R)")
biocLite("GEOquery")
library(GEOquery)

此步骤耗费我1h,本来满满的成就感,直到我看到这篇文章的开头,http://www.bio-info-trainee.com/bioconductor_China/software/GEOquery.html,平时不看文,实操两行泪

2. 下载数据

gset <- getGEO('GSE99507', destdir=".")

3. ID转换

GPL中的探针和基因名称 与 GSE中探针对应的表达关系 相match。

rm(list = ls())
options(stringsAsFactors = F) #读表的时候,不要把字符读成factor
library(GEOquery)
eSet <- getGEO('GSE99507', destdir = '.')
exprSet <-  exprs(eSet[[1]]) #exprs用来提取表达矩阵
pdata <- pData(eSet[[1]]) #pData用来提取样本信息
View(pdata) #瞅一眼看分组信息

#以下进行分组,分别是Tinagl1过表达组和正常组
library(stringr)
group_list <- trimws(str_split(pdata$title,' ',simplify = T)[,5])
group_list <- str_replace(group_list,'LM2','Vector')
table(group_list)
group_list
gpl <- getGEO("GPL17077", destdir = ".") #此GPL没有注释的R包,只能手动找
colnames(Table(gpl))
head(Table(gpl)[,c(1,7)])
write.csv(Table(gpl)[,c(1,7)],"GPL17077.csv")
ids <- read.csv("GPL17077.csv") #获得探针对应基因的表达矩阵
ids = ids[,-1]
View(ids)
length(unique(ids$GENE_SYMBOL))  
tail(sort(table(ids$GENE_SYMBOL)))
table(sort(table(ids$GENE_SYMBOL)))
table(rownames(exprSet) %in% ids$ID)
dim(exprSet)
exprSet <- exprSet[rownames(exprSet) %in% ids$ID,] 
dim(exprSet)
ids <- ids[match(rownames(exprSet),ids$ID),] #改ID顺序
View(ids)
head(ids)
exprSet[1:5,1:5] #瞅一眼表达矩阵的开始和ids的是否相同

#ids的GENE_SYMBOL对表达矩阵进行分类
tmp <- by(exprSet,
         ids$GENE_SYMBOL,
         function(x)
         rownames(x)[which.max(rowMeans(x))] ) 
#分类,如果有一个基因对应多个探针,只保留在所有样本里面平均表达量最大的那个探针
probes <- as.character(tmp)
dim(exprSet)
exprSet=exprSet[rownames(exprSet) %in% probes ,] #过滤出有多个探针的基因
dim(exprSet)
save(exprSet,group_list,file = "step1.Rdata")

rownames(exprSet)=ids[match(rownames(exprSet),ids$ID),2]
exprSet[1:5,1:5]
View(exprSet)
library(reshape2)
exprSet_L<- melt(exprSet) 
colnames(exprSet_L) <- c('probe','sample','value')
exprSet_L$group <- rep(group_list,each=nrow(exprSet)) 
head(exprSet_L)
View(exprSet_L)
save(exprSet_L,group_list,file = "step2.Rdata")

#看表达矩阵样本分组信息是否合理
exprSet["ACTB",] #关键蛋白常见蛋白β-actin表达量是否合理
library("ggplot2")
p <- ggplot(exprSet_L,aes(x=sample,y=value,fill=group))+geom_boxplot()
print(p)

4. 画图

install.packages("ggfortify")
library("ggfortify")
df <- as.data.frame(t(exprSet))
df$group <- group_list
autoplot(prcomp(df[,1:(ncol(df)-1)]),data = df, colour = "group")
library( "limma" )
dim(exprSet)
group_list
design <- model.matrix( ~0 + factor( group_list ) ) #根据分组变成矩阵
colnames( design ) <-  levels( factor( group_list ) )
rownames( design ) <-  colnames( exprSet )
design

#下面做比较矩阵
contrast.matrix <- makeContrasts(paste0(unique(group_list),
                                        collapse = "-"), levels = design )
contrast.matrix
fit <- lmFit(exprSet, design )
fit2 <- contrasts.fit( fit, contrast.matrix )
fit2 <- eBayes( fit2 )
nrDEG <-  topTable( fit2, coef = 1, n = Inf )
write.table( nrDEG, file = "nrDEG.out")
head(nrDEG)
View(nrDEG)
install.packages("pheatmap")
library( "pheatmap" )
choose_gene <- head( rownames( nrDEG ), 20 ) #取了前20个差异最大的基因,这数可以自己定
choose_matrix <-  exprSet[ choose_gene, ]
annotation_col = data.frame( CellType = factor( group_list ) )
rownames( annotation_col ) = colnames( exprSet )
pheatmap( fontsize = 5, choose_matrix, annotation_col = annotation_col, show_rownames = T,annotation_legend = T, filename = "heatmap_1.png")

跌跌撞撞,终于花了8h作了一张图出来,使用的都是别人写的代码,主要参考的代码有:
http://www.bio-info-trainee.com/3409.html
https://www.jianshu.com/p/0dcc6030343e
https://mp.weixin.qq.com/s/nVnL_uc6GEkD_cLpMHCYXg
目前还有部分代码不是很理解,还要继续努力啊。

上一篇下一篇

猜你喜欢

热点阅读