七步带你解构GEO芯片数据分析-脚本化(二)

一、数据集介绍

1.运行准备与获取输入数据及输入数据检查

  • 01步R包加载、加载数据处理脚本与加载绘图脚本

清空环境,加载R包与脚本----

source("scripts/step0-load-packages.R") #加载R包
source("scripts/functions.R") #加载数据处理脚本
source('scripts/draw-figures.R')#加载绘图脚本
  • 02步获取输入数据
  • 主要获得三方面输入数据:(表达矩阵、临床信息与芯片注释包)
# 获取表达矩阵、临床信息与芯片注释包----
getOption('timeout')
options(timeout=10000)
gse_number = "GSEGSE62452"#需要指定gse_number 
f="step1-data.Rdata"
source("scripts/step1-download-data.R") #下载三方面输入数据
  • 03步输入数据检查(两方面)
  • 主要检查两方面:1.检查exp列名与pd的行名顺序是否完全一致 2.检查是否需要取log(箱线图)
# 数据两方面检查----

## 01-检查1:exp列名与pd的行名顺序是否完全一致
p = identical(rownames(pd),colnames(probeM));p
if(!p) probeM = probeM[,match(rownames(pd),colnames(probeM))]

## 02-检查2:是否需要取log
probeM[1:4,1:4]#检测整体探针是否需要取log,小于20则不需要取
#probeM =log2(probeM+1) #不取log则不要运行此步,不运行可以加个注释

## 03-开始绘图
draw_p1_boxplot(probeM)#箱线图初看组内与组间测序差异 p1

2.整理数据

  • 整理两方面:1.整理获得去除冗余探针的表达矩阵 2.整理获得分组信息
  • 04步整理探针矩阵获取基因表达矩阵,去除冗余探针
# 整理探针矩阵获取基因表达矩阵,去除冗余探针----

## 01将探针表达矩阵转换为基因表达矩阵,探针ID与基因symbol一一对应
geneM = probeM2geneM(ids,probeM)

## 02检查转换情况,看两个管家基因表达范围(正常10-15之间)
fivenum(geneM['ACTB',])
fivenum(geneM['GAPDH',])
  • 05步整理获得分组信息(根据生物学背景及研究目的人为分组)
# 获取样品分组信息并进行分组----

## 01查找分组信息所在列,通过使用ifelse与str_detect进行分组
pd$source_name_ch1 #找列,看有无分组信息
Group=ifelse(str_detect(pd$source_name_ch1,"Non"),"Normal","PDAC") #进行分组

## 02将Group转换成因子,指定levels;对照组在前,处理组在后
Group = factor(Group,levels = c("Normal","PDAC"))
table(Group)

## 03保存基因表达矩阵与样品分组信息
save(geneM,Group,file = "step2-genemGro.Rdata")
    1. 3个质控图及其拼图(样本PCA图、高变基因热图与样品相关性图)
  • 3个图的作用:从样本间的差异与样本内的差异来看测序效果与分组是否有差异
# 绘制三个质控图----

## 01PCA看组内与组间整体差异  p2
p2=draw_p2_PCA(probeM,gse_number,Group)

## 02高变基因热图(画sd排名前1000基因的热图)p3
p3=draw_p3_pheatmap(geneM,Group,gse_number)

## 03样品相关性热图 p4
p4=draw_p4_colsample(Group,exp,gse_number)

## 04拼图与保存
##注热图得转换为ggplot格式才能进行拼图
p2+as.ggplot(p3)+ as.ggplot(p4)  
ggsave("png/p234.pdf",width = 12,height = 5)
p2 |(as.ggplot(p3)/ as.ggplot(p4) ) 
  • 4.差异基因-limma分析(火山图与热图,两图)
# 差异分析与绘制火山图与热图----

## 01差异分析-limma分析(得到6列差异基因表达矩阵)
deg=DEG_limma(Group,probeM)

## 02第7列:加上下调基因列(为绘制火山图与差异基因热图做准备)
logFC_t=1;P.Value_t = 0.05  #设置显著差异过滤条件
k1 = (deg$P.Value < P.Value_t)&(deg$logFC < -logFC_t)
k2 = (deg$P.Value < P.Value_t)&(deg$logFC > logFC_t)
deg <- mutate(deg,change = ifelse(k1,"down",ifelse(k2,"up","stable")))

## 03第8列:加ENTREZID列及其余列,为富集分析
s2e <- bitr(deg$symbol, 
            fromType = "SYMBOL",
            toType = "ENTREZID",
            OrgDb = org.Hs.eg.db)#人类
#其他物种http://bioconductor.org/packages/release/BiocViews.html#___OrgDb
deg <- inner_join(deg,s2e,by=c("symbol"="SYMBOL"))

## 04去重ENTREZEID对应多个基因的现象
deg=deg[order(deg$symbol,abs(deg$logFC),decreasing = T),] #先按绝对值排
deg = deg[!duplicated(deg$symbol),]
table(deg)

## 05差异基因好了,绘制火山图 p5
p5=draw_p5_volcano(Group,deg,gse_number)

## 06前十与后十个差异基因绘制热图 p6

### 001挑选前十与后十变化最为显著的差异基因
dat1=filter(deg,change!="stable") #去组别间不发生显著变化的基因
dat2=arrange(dat1,logFC)#排序
cg = c(head(dat2$symbol,10),tail(dat2$symbol,10)) #取前十与后十
n=geneM[cg,]  ##差异表达矩阵里取前十与后十
dim(n)

## 002 20个差异表达矩阵好了,绘制热图
p6 <- draw_p6_geneheatmap(Group,n)
p6

## 07拼图与保存图片
plot_grid(p5, as.ggplot(p6))
ggsave("png/p56.pdf",width=15, height=15)
plot_grid(p5, as.ggplot(p6))
  • 5利用GO与KEGG富集分析差异功能与差异通路
# GO富集分析----

## 01先对差异基因进行富集,包括上调、下调与整体差异基因
ego=GO_enrich(deg) 

## 02对富集后的结果可视化
p7=draw_p7_GObarplot(ego)

# KEGG富集分析---

## 01先对上下调差异基因进行KEGG富集
load(paste0(gse_number,"_GO.Rdata")) #输入已有的上下调参数
KEGG_enrich(deg)

## 02按照q值分别挑选10条上调与下调最显著的KEGG通路
load(paste0(gse_number,"_KEGG.Rdata"))
top10updownKEGG(kk.down,kk.up)

## 03绘制top10down与top10up的KEGG条形图
load("top10updown.Rdata")
p8 <- draw_p8_KEGGBarplot (up.data,down.data)

## 04拼图(GO与KEGG结果拼图)
plot_grid(p7,p8)
ggsave("png/p78.pdf",width = 15,height=15)
plot_grid(p7,p8)
  • 6 GSEA富集分析
# KEGG的GSEA富集分析---

## 01KEGG的GSEA富集
KeggGSEA_enrich(deg)

## 02挑选前6个上调与后6个下调通路
load('Rdata/gsea_kk.Rdata')
dat=top6downupGSEA(deg)

## 03绘制KEGG的GSEA富集分析条形图
p9 <- draw_p9_gsea(dat)

7.KEGG的GSEA富集分析具体通路可视化(折线图)

# 针对上面获得的12条通路进行具体GSEA可视化

## 01先看下调的6个通路并绘折线图
load("top6downup.Rdata")
p10 <- gseaplot2(kk, geneSetID = rownames(down_k))
p10
ggsave("png/p10.png")

## 02再看上调的6个通路并绘折线图
p11=gseaplot2(kk, geneSetID = rownames(up_k))
ggsave("png/p11.png")

## 03拼图并保存
plot_grid(p9,p10,p11)
ggsave("png/p91011.pdf",width = 15,height=15)
plot_grid(p9,p10,p11)

以上脚本均来自生信技能树,生信技能树目前正在进行万能芯片数据的处理,Jimmy老师现场演示。详情请见生信技能树公众号,以上脚本以及各种芯片数据的处理,你也可以手到擒来,轻松复现。

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

推荐阅读更多精彩内容