GEO数据挖掘4
时间:2022-07-25
本文章向大家介绍GEO数据挖掘4,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
GEO数据挖掘4
sunqi
2020/7/12
概述
对GEO数据进行差异分析
简单比较
rm(list = ls())
options(stringsAsFactors = F)
options(digits = 4) #设置全局的数字有效位数为4
load(file = 'step1-output.Rdata')
#导入的数据中,dat为表达矩阵,group_list为分组信息
#按照group_list分组画箱线图
boxplot(dat[1,]~group_list)
# 定义函数,用于和绘制箱式图
bp=function(g){
# 高级绘图包,用于绘制自定义图
# 比如添加P值之类的操作
library(ggpubr)
# 准备需要的数据
df=data.frame(gene=g,stage=group_list)
p <- ggboxplot(df, x = "stage", y = "gene",
color = "stage", palette = "jco",
add = "jitter")
# 添加p值
p + stat_compare_means()# 添加比较函数,默认使用wilcox
}
# 对4个样本的箱式图绘制
bp(dat[1,])
bp(dat[2,])
bp(dat[3,])
bp(dat[4,])
基因差异分析
这里需要使用差异比较用到的limma包,在使用这个包进行分析之前,需要准备三个矩阵 * 表达矩阵 * 分组矩阵 * 差异比较矩阵
# 如果没有这个包,需要进行install,应该是biocmanger下载
library(limma)
# 数据预处理
# 分组矩阵准备
design <- model.matrix(~0+factor(group_list))
# 给分组矩阵添加分组名
colnames(design)=levels(factor(group_list))
head(design)
## Control Vemurafenib
## 1 1 0
## 2 1 0
## 3 1 0
## 4 0 1
## 5 0 1
## 6 0 1
# 表达矩阵
exprSet=dat
# 给分组矩阵添加样本名
rownames(design)=colnames(exprSet)
design
## Control Vemurafenib
## GSM1052615 1 0
## GSM1052616 1 0
## GSM1052617 1 0
## GSM1052618 0 1
## GSM1052619 0 1
## GSM1052620 0 1
## attr(,"assign")
## [1] 1 1
## attr(,"contrasts")
## attr(,"contrasts")$`factor(group_list)`
## [1] "contr.treatment"
# 差异比较矩阵,也就是哪个和那个比的矩阵
contrast.matrix<-makeContrasts("Vemurafenib-Control",
levels = design)
# 进行差异比较的主要函数
# 这里需要输入三个文件,表达矩阵,分组矩阵,比较矩阵
deg = function(exprSet,design,contrast.matrix){
##线性模型拟合
fit <- lmFit(exprSet,design)
##添加比较矩阵,进行差值计算
fit2 <- contrasts.fit(fit, contrast.matrix)
## 贝叶斯检验
fit2 <- eBayes(fit2)
## 生成检验结果报告
tempOutput = topTable(fit2, coef=1, n=Inf)
## 去除缺失的数据
nrDEG = na.omit(tempOutput)
return(nrDEG)
}
# 调用函数
deg = deg(exprSet,design,contrast.matrix)
# 保存比较结果后续使用
save(deg,file = 'deg.Rdata')
logFC为输入的表达矩阵中case一组的平均表达量减去control一组的平均表达量的值
火山图绘制
进行差异比较滞后,绘制火山图,对差异基因进行可视化
# 这里的if函数用于折叠代码,方便阅读,没什么重要意义
nrDEG=deg# 重新赋值
attach(nrDEG)# 方便写代码
plot(logFC,-log10(P.Value))# 对p取对数
# 上面的图不太美观,进行美化
# 有点饿了,想吃烤串,一会儿学习
library(ggpubr)
df=nrDEG
df$v= -log10(P.Value) #对p进行取负对数
# 散点图
ggscatter(df, x = "logFC", y = "v",size=0.5)
# 火山图倒置之后,继续对基因标注
# 对上调和下调的基因进行标注
df$g=ifelse(df$P.Value>0.01,'stable', #判断是否为稳定基因
ifelse( df$logFC >2,'up', #判断是否上调
ifelse( df$logFC < -2,'down','stable') ))#判断是否下调
# 查看有多少上调和下调基因
table(df$g)
##
## down stable up
## 51 18686 84
# 添加name列
df$name=rownames(df)
#散点图
ggscatter(df, x = "logFC", y = "v",size=0.5,color = 'g')
# 添加分组信息
ggscatter(df, x = "logFC", y = "v", color = "g",size = 0.5,
label = "name", repel = T,
label.select = head(rownames(deg)), #挑选一些基因在图中显示出来
palette = c("#00AFBB", "#E7B800", "#FC4E07") )
# 保存图片
# ggsave('volcano.png')
# MA图绘制
# MA图用于展示两组变化关系,(x+y)/2作为横轴,(y-x)作为纵轴
# 方便观察两组数值偏离程度(差异程度)
ggscatter(df, x = "AveExpr", y = "logFC",size = 0.2)
df$p_c = ifelse(df$P.Value<0.001,'p<0.001',
ifelse(df$P.Value<0.01,'0.001<p<0.01','p>0.01'))
table(df$p_c )
##
## 0.001<p<0.01 p<0.001 p>0.01
## 2213 5291 11317
ggscatter(df,x = "AveExpr", y = "logFC", color = "p_c",size=0.2,
palette = c("green", "red", "black") )
# 保存结果
# ggsave('MA.png')
差异基因热图
load(file = 'step1-output.Rdata')
x=deg$logFC # deg为差异比较的结果
names(x)=rownames(deg) # 将基因名添加
# 对差异排序,并取前后100的基因名,赋值到cg
cg=c(names(head(sort(x),100)),
names(tail(sort(x),100)))
# 绘制热图
library(pheatmap)
# 对差异基因绘制热图
pheatmap(dat[cg,],show_colnames =F,show_rownames = F)
# 对数据归一化后绘制热图
n=t(scale(t(dat[cg,])))
n[n>2]=2
n[n< -2]= -2
pheatmap(n,show_colnames =F,show_rownames = F)
# 添加分组信息
ac=data.frame(g=group_list)
rownames(ac)=colnames(n)
pheatmap(n,show_colnames =F,
show_rownames = F,
cluster_cols = F,
annotation_col=ac)
结束语
这里对GEO数据的差异分析已经结束,后续为kegg和go分析
love&peace
- mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
- 安装 IronPython
- Python 项目实践三(Web应用程序)第一篇
- Centos 7.0 安装Mono 3.4 和 Jexus 5.6
- 第一个IronPython程序(之二)
- Python 项目实践二(下载数据)第四篇
- Python 项目实践二(下载数据)第三篇
- 体验扁平化的WordPress 后台管理界面
- Python 项目实践二(生成数据)第二篇
- 重新审视SqlDataReader的使用
- Python 项目实践二(生成数据)第一篇
- 删除 WordPress 导航菜单的多余 CSS 选择器
- 删除 WordPress 导航菜单的多余 CSS 选择器
- 使用asp.net 2.0的CreateUserwizard控件如何向自己的数据表中添加数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Logstash: 应用实践 - 装载 CSV 文档到 Elasticsearch
- LeetCode 剑指 Offer 28. 对称的二叉树
- Mysql拼接查询结果
- 手把手教你如何重建二叉树(超精彩配图)
- 一文搞定插入排序算法
- LeetCode 107. 二叉树的层次遍历 II
- LeetCode 103. 二叉树的锯齿形层次遍历
- 我是怎么一步一步调试出来二叉树的遍历(超精彩配图),二叉树遍历再也不用愁了
- 重中之重的二分查找
- LeetCode 剑指Offer 面试题27. 二叉树的镜像
- 一文搞定选择排序算法
- 一文搞定冒泡排序算法
- 剑指Offer LeetCode 面试题25. 合并两个排序的链表
- LeetCode 20200601 打卡 1431. 拥有最多糖果的孩子
- 剑指Offer LeetCode 面试题24. 反转链表