【生信技能树】GEO数据库挖掘 P7 6差异分析

用limma包对芯片数据做差异分析 | 生信菜鸟团http://www.bio-info-trainee.com/1194.html用limma包的voom函数来对RNA-seq数据做差异分析 | 生信菜鸟团http://www.bio-info-trainee.com/1544.htmllimma包的使用技巧 - hzs319 - 博客园limmar package是一个功能比较全的包,既含有cDNA芯片的RAW data输入、前处理(归一化)功能,同时也有差异化基因分析的“线性”算法(limma: Linear Models forhttps://www.cnblogs.com/huzs/p/3741979.html根据分组信息做差异分析- 这个一文不够的 - 云+社区 - 腾讯云https://cloud.tencent.com/developer/article/1078357

以上教程可以参考。

用limma包做差异分析的教程,与视频教程相同。

【生信技能树】GEO数据库挖掘_哔哩哔哩_bilibilijimmy开始招学徒啦~这个课程就是周末的线下课的录屏哦~戳它了解→ https://mp.weixin.qq.com/s/gzyCRNnfgYkSsnjPSr-MGw 专栏:https://www.bilibili.com/read/cv719181这个系列视频包学包会,学不会……那就多看几遍……或者……欢迎报名jimmy的线下课呀~o(* ̄▽ ̄*)ブhttps://www.bilibili.com/video/BV1is411H7Hq?p=7根据教程将三个文件准备好

下载该R语言包,然后看说明书,需要自己做好三个数据(表达矩阵,分组矩阵,差异比较矩阵),总共三个步骤(lmFit,eBayes,topTable)。

表达矩阵:exprSet

分组矩阵:


library(limma)
# 设置design以及分组矩阵
design <- model.matrix(~0+factor(group_list))
colnames(design)=levels(factor(group_list))
rownames(design)=colnames(exprSet)
design

这里要注意,生成的design矩阵要看一下,横纵轴对应关系对不对,搞错就尴尬了。

声明两个组的信息

# 声明要进行比较的组
contrast.matrix <- makeContrasts(paste0(unique(group_list),collapse = '-'),levels = design)
View(contrast.matrix)

差异分析
做个function叫做var_analy,写function一定要用=

# 差异分析
# 做个function叫做var_analy,写function一定要用=
diff_analy = function(exprSet,design,contrast.matrix){
  # Step 1
  fit <- lmFit(exprSet,design)
  # step 2
  fit_contrast <- contrasts.fit(fit, contrast.matrix)
  fit_contrast <- eBayes(fit_contrast) # default no trend!!!
  ##eBayes() with trend = True
  ## step3
  tempOutput = topTable(fit_contrast, coef=1, n=Inf)
  DEG_voom = na.omit(tempOutput)
  head(DEG_voom)
  return(DEG_voom)
}

# diff_result 即为差异分析的结果
diff_result <- diff_analy(exprSet,design,contrast.matrix)

diff_result即为差异分析的结果。

检验一下

先用一个基因来做检验:

# 看一下某个基因是高表达还是低表达
exprSet['LDLR',]

## heatmap 
library(pheatmap)
# 这是全是数字探针id的时候
# choose_gene=head(rownames(diff_result),25)
# 如果都是基因名了
choose_gene=head(diff_result$ID,25)
choose_matrix=exprSet[choose_gene,]
choose_matrix=t(scale(t(choose_matrix)))
pheatmap(choose_matrix)

再用热图看一下。

choose_gene变量是一个挑出来的基因列表,如果是有字符的要用提取,因为diff_result里,不会把rawname直接变成字符。

当然这里提前把diff_result的raw names改掉也没问题。


火山图绘制

## volcano plot
library(ggplot2)
# 此处的DEG_voom是之前生成的表达矩阵。
DEG=DEG_voom
## 火山图本质上是logFC以及Pvalue的作图
plot(DEG$logFC,-log10(DEG$P.Value))
logFC_cutoff <- with(DEG,mean(abs( logFC)) + 2*sd(abs( logFC)) )
DEG$change = as.factor(ifelse(DEG$P.Value < 0.05 & abs(DEG$logFC) > logFC_cutoff,
                              ifelse(DEG$logFC > logFC_cutoff ,'UP','DOWN'),'NOT')
)
this_tile <- paste0('Cutoff for logFC is ',round(logFC_cutoff,3),
                    '\nThe number of up gene is ',nrow(DEG[DEG$change =='UP',]) ,
                    '\nThe number of down gene is ',nrow(DEG[DEG$change =='DOWN',])
)
this_tile
head(DEG)
g = ggplot(data=DEG, aes(x=logFC, y=-log10(P.Value), color=change)) +
  geom_point(alpha=0.4, size=1.75) +
  theme_set(theme_set(theme_bw(base_size=20)))+
  xlab("log2 fold change") + ylab("-log10 p-value") +
  ggtitle( this_tile  ) + theme(plot.title = element_text(size=15,hjust = 0.5))+
  scale_colour_manual(values = c('blue','black','red'))  ## corresponding to the levels(res$change)
print(g)

火山图 本质上是改变倍数以及p-value之间横纵轴两条线的关系分布,加上ggplot的各种改编。因此只要注意生成的文档格式以及性质即可。


得到差异基因后,可以根据基因去注释相关的通路,具体包括GO/KEGG等通路。

GO注释功能、位置等,

KEGG、BIOCARTA、Reactome、MsigDB寻找基因富集通路。统计方法:超几何分布,本质就是正常状态下抽取到通路相关基因的概率,和基因富集后如果在一个通路上,那抽取到相关通路基因的概率是不一致的,以此概率差别来做分布检验。

具体就详见相关的包。

差异分析得到的结果注释一文就够icon-default.png?t=M276https://mp.weixin.qq.com/s/t0ZrkPX9yz6vaHouY33Ohg

library(clusterProfiler)

clusterprofiler包可以尝试做,注意更新以及相关语法。

你可能感兴趣的:(GEO,聚类)