CEO数据挖掘的常规套路

00_pre_install_R_package


切换镜像

options("repos"="https://mirrors.ustc.edu.cn/CRAN/")
if(!require("BiocManager")) install.packages("BiocManager",update = F,ask = F)
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")

安装cran的R包

cran_packages <- c('tidyr',
'tibble',
'dplyr',
'stringr',
'ggplot2',
'ggpubr',
'factoextra',
'FactoMineR',
'devtools',
'patchwork')

安装bioconductor的R包

Biocductor_packages <- c('GEOquery',
'hgu133plus2.db',
'ggnewscale',
"KEGG.db",
"limma",
"impute",
"GSEABase",
"GSVA",
"clusterProfiler",
"org.Hs.eg.db",
"preprocessCore",
"enrichplot",
"ggplotify")

循环语句安装cran的R包 #require就是加载的意思

for (pkg in cran_packages){
if (! require(pkg,character.only=T) ) {
install.packages(pkg,ask = F,update = F)
require(pkg,character.only=T)
}
}

循环语句安装bioconductor的R包

for (pkg in Biocductor_packages){
if (! require(pkg,character.only=T) ) {
BiocManager::install(pkg,ask = F,update = F)
require(pkg,character.only=T)
}
}

前面的所有提示和报错都先不要管。主要看这里

for (pkg in c(Biocductor_packages,cran_packages)){
require(pkg,character.only=T)
}

没有任何提示就是成功!

这是github里面的包

if(!require(AnnoProbe))devtools::install_local("./AnnoProbe-master.zip",upgrade = F)
library(AnnoProbe)

01_GEO表达矩阵和临床信息下载

#数据下载
rm(list = ls())
options(stringsAsFactors = F)
library(GEOquery)
gse_number = "GSE56649"
eSet <- getGEO(gse_number, #根据GSE编号下载数据
               destdir = '.', 
               getGPL = F)
class(eSet)#查看一下eSet的类型
length(eSet)#长度
eSet = eSet[[1]]#扒掉列表成为表达矩阵
class(eSet)#确认下类型

#(1)提取表达矩阵exp
exp <- exprs(eSet)#提取表达矩阵
exp[1:4,1:4]#查看下数据的形式

#表达数据如果是几百上千的话,是没有必要进行log的
exp = log2(exp+1)#+1是以防原始数据有0的情况
boxplot(exp)#箱式图查看下数据的是否大概一致
#有离群数据记得去掉

#(2)提取临床信息
#提取临床信息只能用该函数
pd <- pData(eSet)

#(3)调整pd的行名顺序与exp列名完全一致
#调整表达矩阵的列名和临床信息表格的行名(都是样本名)一一对应
p = identical(rownames(pd),colnames(exp));p
if(!p) exp = exp[,match(rownames(pd),colnames(exp))]
#match(rownames(pd),colnames(exp))表示返回前者的元素在后者元素中的位置值 

#(4)提取芯片平台编号
#记住这里是用@,而不是$($提取的是pdata中的数据)
gpl_number <- eSet@annotation
save(gse_number,pd,exp,gpl_number,
     file = "step1output.Rdata")

02_分组和注释

# Group(实验分组)和ids(探针注释)
rm(list = ls())

#加载第一步的数据
load(file = "step1output.Rdata")
library(stringr)
# 1.Group----每个数据的分组信息不一样,分为以下几种情况。
#本次的芯片中只包含有两个组:患者组和对照组
#产生分组的方法有多种,现在我们介绍三种,第一和第二种适合样本少的,
#第三种利用关键字匹配分组适合所有


# 第一类,有现成的可以用来分组的列
if(F) Group = pd$`disease state:ch1` 

#第二类,自己生成
if(F){
  Group=c(rep("RA",times=13),
          rep("control",times=9))
}
#或者Group=rep(c("RA","control"),times = c(13,9))

#第三类,匹配关键词,自行分类
##这种分组方式大力推荐,因为我们只要根据关键词提取信息,从而分组
Group =ifelse(str_detect(pd$source_name_ch1,"control"),"control","RA")
#该语句的意思是:如果在pd$source_name_ch1列中找到control的话就是T,
#返回一个字符“control”#否则就返回“RA”


#这丽需要非常注意
#注意设置参考水平,指定levels,
#注意:对照组在前,处理组在后#这和后面logFC中患者组/对照组有关

Group = factor(Group,
               levels = c("control","RA"))
Group#和临川信息pd中确认一下是否一一对应




# 注意levels与因子内容必须对应一致
# Group = pd$`disease state:ch1`
# Group = factor(Group,
#                 levels = c("healthy control","rheumatoid arthritis"))



#2.ids-----------------
#GEO的ids注释有4种方法,第一种:利用GPL平台对应的R包(推荐)
#第二种:读取GPL平台的soft文件,按列取子集


#方法1 BioconductorR包(最常用):里面包含基因探针和gene名对应的情况
gpl_number #找寻平台信息
#通过平台信息,可以找寻到相对应的注释包
#这里平台信息是GPL_570,对应的注释包为hgu133plus2.db,下面链接有多个平台对应的信息
#http://www.bio-info-trainee.com/1399.html
#这部分主要是把探针的ID切换成基因的ID,我一般喜欢用基因的entrez ID

#获取有注释信息的芯片平台
if(!require(hgu133plus2.db))BiocManager::install("hgu133plus2.db")
library(hgu133plus2.db)
ls("package:hgu133plus2.db")
#用的是SYMBOL,代表就是基因名
ids <- toTable(hgu133plus2SYMBOL)
head(ids)


# 方法2 读取GPL平台的soft文件,按列取子集
##https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL570
if(F){
  #注:soft文件列名不统一,活学活用,有的GPL平台没有提供注释,如GPL16956
  a = getGEO(gpl_number,destdir = ".")
  b = a@dataTable@table
  colnames(b)
  ids2 = b[,c("ID","Gene Symbol")]
  colnames(ids2) = c("probe_id","symbol")
  ids2 = ids2[ids2$symbol!="" & !str_detect(ids2$symbol,"///"),]#去除空格和检测到带有///的基因名
}
# 方法3 官网下载,文件读取
##http://www.affymetrix.com/support/technical/byproduct.affx?product=hg-u133-plus
# 方法4 自主注释 
#https://mp.weixin.qq.com/s/mrtjpN8yDKUdCSvSUuUwcA
save(exp,Group,ids,gse_number,file = "step2output.Rdata")

03_PCA主成分分析和热图简介

rm(list = ls()) 
#加载前两步的数据
load(file = "step1output.Rdata")
load(file = "step2output.Rdata")
#输入数据:exp和Group
#Principal Component Analysis主成分分析
#下面的链接讲了有关主成分分析的内容和R包的代码
#http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/112-pca-principal-component-analysis-essentials
#上图该网站中有多种示例数据和相关代码


# 1.PCA 图----
#转置t()
#转换成数据框
dat=as.data.frame(t(exp))

library(FactoMineR)#FactoMineR:用于计算主成分方法;
library(factoextra) #factoextra:用于提取,可视化和解释结果。
dat.pca <- PCA(dat, graph = FALSE)
pca_plot <- fviz_pca_ind(dat.pca,
                         geom.ind = "point", # show points only (nbut not "text")
                         col.ind = Group, # color by groups
                         palette = c("#00AFBB", "#E7B800"),
                         addEllipses = TRUE, # Concentration ellipses
                         legend.title = "Groups"
)
pca_plot#画图
#保存图片
ggsave(plot = pca_plot,
       filename = paste0(gse_number,"_PCA.png"))
save(pca_plot,file = "pca_plot.Rdata")

# 2.top 1000 sd 热图---- 
cg=names(tail(sort(apply(exp,1,sd)),1000))
n=exp[cg,]

# 直接画热图,对比不鲜明
library(pheatmap)
annotation_col=data.frame(group=Group)
rownames(annotation_col)=colnames(n) 
pheatmap(n,
         show_colnames =F,
         show_rownames = F,
         annotation_col=annotation_col
)

# 用标准化的数据画热图,两种方法的比较:https://mp.weixin.qq.com/s/jW59ujbmsKcZ2_CM5qRuAg
#

## 1.使用热图参数
pheatmap(n,
         show_colnames =F,
         show_rownames = F,
         annotation_col=annotation_col,
         scale = "row",#画图数据进行标准化画图。按行进行标准化,牺牲了一行基因与另一行基因的比较,保存在不同样本间的比较,有利于热图的鲜明化
         breaks = seq(-3,3,length.out = 100)
) #breaks 参数解读在上面链接
dev.off()

## 2.自行标准化再画热图
n2 = t(scale(t(n)))#注意按列标准化,函数的限定
pheatmap(n2,
         show_colnames =F,
         show_rownames = F,
         annotation_col=annotation_col,
         breaks = seq(-2,2,length.out = 100)
)
dev.off()

# 关于scale的进一步探索:zz.scale.R

# 3.相关性热图---- 

pheatmap::pheatmap(cor(n2),
                   annotation_col = annotation_col
)

dev.off()

# 关于相关性背后的故事:https://mp.weixin.qq.com/s/IqMW6Qjf64dn30F4RQg5kQ

04_差异表达

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

推荐阅读更多精彩内容