[R言語]——火山図の描画

この号では、R 言語を使用して発現差のある遺伝子をスクリーニングし、火山プロットを描画する方法を紹介します。

1. 火山図とは何ですか?

ボルケーノ プロットは、統計検定における統計的有意性の尺度 (p 値、FDR など) と変化の大きさを組み合わせた散布図の一種で、変化の大きさが大きいデータや統計的に有意なデータを迅速かつ直感的に識別できます。ポイント(遺伝子、代謝産物、微生物など)。トランスクリプトーム、ゲノム、プロテオーム、メタボロームなどの統計データ解析でよく使われる単変量統計解析手法です。その各点は、検出された遺伝子/代謝物/微生物などを表します。

2. 火山地図の作成

1 データの準備

データ入力形式(xlsx形式):

  • gene_name : 遺伝子の名前

  • FC : 遺伝子差倍数 (変化倍数)、つまり、あるサンプル グループの遺伝子の平均発現レベルを別のサンプル グループの平均発現レベルで割ったもの。1 より大きい場合は上方制御を示し、1 より小さい場合は下方制御を示します。

  • log2FC : Log2 (変化倍数) 火山チャートの横軸の変数「変化倍数」を log2 変換した後、得られたデータの正の数値は上方制御された遺伝子、負の数値は下方制御された遺伝子, これにより、火山チャートの両側が対称分布 (つまり、左のテーブルが下、右のテーブルが上) になるようにします。デフォルトのフィルタリング基準は |log2FC| ≧ 1 です。

  • PValue : P 値、有意性検定法に基づいて統計的に得られる測定値 一般に P < 0.05 が有意、P < 0.01 が極めて有意であると考えられ、サンプル間の差がサンプリング誤差によって生じていることを意味します. 偶然の確率は 0.05 または 0.01 未満です。

  • FDR(false discovery rate):是根据假设检验的P-value进行校正而得到,通常计算FDR采用Benjamini-Hochberg方法(简称BH法)。FDR<0.05表示容许数据中存在至多5%假阳性率。以转录组为例,转录组分析并不是针对一个或几个转录本进行分析,是对一个样品中所转录表达的所有转录本进行分析。这样一个样品当中有多少转录本,就需要对多少个转录本进行假设检验。这样做成千上万次检验,本身就会引入假阳性结果,因此需要进行多重假设检验校正,如FDR、adjusted P-value等。(adjusted P-value, q-value, FDR一般代表相同的含义,都是多重假设检验校正后的P-value,区别在于校正算法的不同)

  • -log10FDR:FDR数值越小统计越显著,-log10FDR转换后则反过来,数值越大越显著。

  • -log10PValue:PValue数值越小统计越显著,-log10PValue转换后则反过来,数值越大越显著。

差异表达基因筛选:

将log2FC≧1、且p<0.05的基因标记为:差异显著“上调”基因;

将log2FC≤-1、且p<0.05的基因标记为:差异显著“下调”基因;

剩下的基因标记为:差异不显著基因。

2 R包加载、数据导入及处理


###下载包###
install.packages("ggrepel")
install.packages("ggplot2")
install.packages("openxlsx")
###加载包###
library(ggplot2)
library(ggrepel)
library(openxlsx)
###导入数据###
remove(list = ls()) #清除 Global Environment
getwd()  #查看当前工作路径
setwd("C:/Rdata/jc")  #设置需要的工作路径
list.files()  #查看当前工作目录下的文件
data = read.xlsx("volcano.xlsx",sheet= "单组火山图1",sep=',')  #数据中的log10FDR和log10PValue列都已乘以“-1”
#data = read.table(file='C:/Rdata/jc/volcano.xlsx',header=TRUE,sep=',')
colnames(data) <- c("gene_name", "FC", "log2FC", "PValue", "FDR", "log10FDR","log10PValue") #重新命名行名
head(data)

###数据处理——根据FDR进行差异基因筛选###
cut_off_FDR =0.05 #设置FDR的阈值
cut_off_log2FC =1 #设置log2FC的阈值
data$Sig = ifelse(data$FDR < cut_off_FDR &    #根据阈值筛选差异显著的上下调基因,与差异不显著的基因
                        abs(data$log2FC) >= cut_off_log2FC,  #abs绝对值
                      ifelse(data$log2FC > cut_off_log2FC ,'Up','Down'),'no')
data = data.frame(data)
table(data$Sig) #查看数据统计情况

3 火山图绘制


###绘图——基础火山图###
p1 <- ggplot(data, aes(x =log2FC, y=log10FDR, colour=Sig)) + #x、y轴取值限制,颜色根据"Sig"
  geom_point(alpha=0.65, size=2) +  #点的透明度、大小
  scale_color_manual(values=c("#546de5", "#d2dae2","#ff4757")) + xlim(c(-30, 30)) +  #调整点的颜色和x轴的取值范围
  geom_vline(xintercept=c(-cut_off_log2FC,cut_off_log2FC),lty=4,col="black",lwd=0.8) + #添加x轴辅助线,lty函数调整线的类型:"twodash"、"longdash"、"dotdash"、"dotted"、"dashed"、"solid"、"blank"
  geom_hline(yintercept = -log10(cut_off_FDR), lty=4,col="black",lwd=0.8) +  #添加y轴辅助线
  labs(x="log2FC", y="-log10FDR") +  #x、y轴标签
  ggtitle("单组火山图") + #标题
  theme_bw() + # 主题,help(theme)查找其他个性化设置
  theme(plot.title = element_text(hjust = 0.5),
        legend.position="right", 
        legend.title = element_blank()
  ) 
p1 #出图

图1 初级火山图


###添加基因名标记###
p2 <- p1 + geom_text_repel(
    data = subset(data, data$FDR < cut_off_FDR & abs(data$log2FC) >= cut_off_log2FC),# 可以设置跟上面不同的阈值,用数值替换即可
    aes(label = gene_name), size = 3,
    box.padding = unit(0.5, "lines"),
    point.padding = unit(0.8, "lines"), segment.color = "black", show.legend = FALSE )
p2 #出图

图2 添加基因标记火山图

###添加差异最显著的上调和下调的前几个基因###
#下载与加载包#
install.packages("dplyr")
install.packages("gt")
library(dplyr) # 用于数据处理
library(gt) # 制作表格
#数据预处理——上下调合并绘制同一类型标签框#
top_20 <- bind_rows(   #分别筛选差异显著前10个的上下调基因,并合并两组数值进行绘图
  data %>%
    filter(Sig == 'Up') %>%
    arrange(FDR, desc(abs(log2FC))) %>%
    head(10),
  data %>%
    filter(Sig == 'Down') %>%
    arrange(FDR, desc(abs(log2FC))) %>%
    head(10)
)
top_20 %>% gt()  #将数据制成表
#绘图——添加基因标签框图#
p4 <- p1 +
  geom_label_repel(data = top_20,
                   aes(log2FC, log10FDR, label = gene_name),
                   size = 3, fill="#CCFFFF")
p4

图3 添加标签框火山图


#数据预处理——将上下调基因分开绘制各自的标签框类型#
Up_top_10 =(     #筛选差异显著上调的前10个Gene
  data %>%
    filter(Sig == 'Up') %>%
    arrange(FDR, desc(abs(log2FC))) %>%
    head(10)
)
Up_top_10 %>% gt() #数据制成表
Down_top_10 = (       #筛选差异显著下调的前10个Gene
  data %>%
    filter(Sig == 'Down') %>%
    arrange(FDR, desc(abs(log2FC))) %>%
    head(10)
)
Down_top_10 %>% gt() #数据制成表

#绘图——分别绘制相应类型的标签框#
p5 <- p1 +
  geom_label_repel(data = Up_top_10,
                   aes(log2FC, log10FDR, label = gene_name),
                   size = 3, fill="#CCFFFF",
                   alpha = 0.65, color = "black")+
  geom_label_repel(data = Down_top_10,
                   aes(log2FC, log10FDR, label = gene_name),
                   size = 3, fill="#FFCCCC",
                   alpha = 0.65, color = "black")
p5

图4 添加不同类型基因标签的火山图


#绘图——将筛选的差异显著的点加粗和用不同颜色标记#
p6 <- p5+geom_point(data=Up_top_10,aes(log2FC, log10FDR),
                    color="#CCCCFF",size=3.5,alpha=1)+
  geom_point(data=Down_top_10,aes(log2FC, log10FDR),
             color="#FFCCCC",size=3.5,alpha=1)
p6

图5 个性化设置以后的火山图

好了本次分享就到这里,下期将分享“多组火山图”绘制,敬请期待。

关注“在打豆豆的小潘学长”公众号,发送“单组火山图”获得完整代码包和演示数据。

おすすめ

転載: blog.csdn.net/weixin_54004950/article/details/128698464