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