小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

轉(zhuǎn)錄組差異分析算法顯示下調(diào),但表達(dá)值卻顯示上調(diào),為什么呢?

 健明 2025-10-25 發(fā)布于廣東

收到我們生信入門班的一個(gè)學(xué)員提問:使用edgeR算法做bulk轉(zhuǎn)錄組的差異表達(dá)分析,發(fā)現(xiàn)有一些基因看logFC值明明是下調(diào),但是使用cpm值看象箱線圖的時(shí)候卻顯示基因是上調(diào)?為什么呢?

這是一個(gè)非常經(jīng)典的轉(zhuǎn)錄組數(shù)據(jù)分析里面有意思的案例,下面就來看看具體細(xì)節(jié)。

此外,我們技能樹最新一期生信入門就在11月3號(hào)開課,還沒上車的可以看一看瞄一瞄,詳細(xì)介紹頁面可以點(diǎn)擊:生信入門&數(shù)據(jù)挖掘線上直播課11月班,完全適合0基礎(chǔ)小白

快來添加小助手報(bào)名咨詢吧:

簡(jiǎn)單做一個(gè)差異分析

首先使用edgeR算法做一個(gè)差異表達(dá)分析,這里你可以使用任何一個(gè)count矩陣作為數(shù)據(jù)輸入,再加上一個(gè)樣本分組信息,比如我們前面用的:

count轉(zhuǎn)TPM/FPKM實(shí)戰(zhàn)(GSE229904)

去下載:https://www.ncbi.nlm./geo/query/acc.cgi?acc=GSE229904

我這里輸入的數(shù)據(jù)是一個(gè)隨便的具有四個(gè)樣本的數(shù)據(jù),兩個(gè)case,兩個(gè)control:

rm(list = ls())
options(stringsAsFactors = F)

# 加載包
library(edgeR)
library(ggplot2)

## 讀取 count矩陣
head(count)

# 分組信息
group_list <- c("control","control","treat","treat")
group_list <- factor(group_list,levels = c("treat","control"))
group_list
table(group_list)

輸入數(shù)據(jù)都準(zhǔn)備好了,走edgeR算法:

# 構(gòu)建線性模型。0代表x線性模型的截距為0
design <- model.matrix(~0+group_list)
rownames(design) <- colnames(count)
colnames(design) <- levels(factor(group_list))
design

# 構(gòu)建edgeR的DGEList對(duì)象
DEG <- DGEList(counts=count, group=factor(group_list))
DEG <- calcNormFactors(DEG)
# 計(jì)算線性模型的參數(shù)
DEG <- estimateGLMCommonDisp(DEG,design)
DEG <- estimateGLMTrendedDisp(DEG, design)
DEG <- estimateGLMTagwiseDisp(DEG, design)
# 擬合線性模型
fit <- glmFit(DEG, design)
# 進(jìn)行差異分析
lrt <- glmLRT(fit, contrast=c(1,-1)) #實(shí)驗(yàn)組在前
# 提取過濾差異分析結(jié)果
DEG_edgeR <- as.data.frame(topTags(lrt, n=nrow(DEG),adjust.method = "BH"))
head(DEG_edgeR)

# 篩選上下調(diào),設(shè)定閾值
fc_cutoff <- 1.2 # 1.2  1.5  2
pvalue <- 0.05  # 0.05, 0.01, 0.001

DEG_edgeR$regulated <- "normal"#給它一個(gè)初始值
DEG_edgeR$regulated[ DEG_edgeR$logFC > log2(fc_cutoff) &  DEG_edgeR$PValue < pvalue ] <- "up"
DEG_edgeR$regulated[ DEG_edgeR$logFC < -log2(fc_cutoff) &  DEG_edgeR$PValue < pvalue ] <- "down"
table(DEG_edgeR$regulated)

## 添加一列g(shù)ene symbol
library(org.Hs.eg.db) 
library(clusterProfiler)
id2symbol <- bitr(rownames(DEG_edgeR), fromType = "ENSEMBL", toType = "SYMBOL",  OrgDb = org.Hs.eg.db)
head(id2symbol)

DEG_edgeR <- cbind(GeneID=rownames(DEG_edgeR),DEG_edgeR)
DEG_edgeR_symbol <- merge(id2symbol,DEG_edgeR, by.x="ENSEMBL",by.y="GeneID",all.y=T)
head(DEG_edgeR_symbol)

差異結(jié)果如下:

挑一個(gè)基因看差異結(jié)果和表達(dá)值比較

這里用的上課的方法,使用簡(jiǎn)單的cpm進(jìn)行的標(biāo)準(zhǔn)化值來進(jìn)行同一個(gè)基因在不同樣本間的比較:

##====== 檢查是否上下調(diào)設(shè)置錯(cuò)了
# 挑選一個(gè)基因看其上下調(diào)方向
# ENSG00000037474 NSUN2
library(ggplot2)
cpm <- cpm(count) # count標(biāo)準(zhǔn)化
head(cpm)

exp <- c(t(cpm[match("ENSG00000037474",rownames(cpm)),]))
test <- data.frame(value=exp, group=group_list)
test

ggplot(data=test,aes(x=group,y=value,fill=group)) + 
  geom_boxplot() + 
  ggtitle("ENSG00000037474 NSUN2")


# 在差異結(jié)果中的方向
DEG_edgeR_symbol[DEG_edgeR_symbol$ENSEMBL=="ENSG00000037474", ]

可以看到 cpm 值顯示的是:相對(duì)對(duì)照組,在treat里面上調(diào),但是差異結(jié)果里面的log2FC<0,卻是下調(diào)?

為什么呢?

為什么會(huì)出現(xiàn)上面的情況:算法下調(diào),但是表達(dá)值上調(diào)?

其實(shí)主要在于edger使用的標(biāo)準(zhǔn)化方法為TMM算法,而我們?cè)诶L制箱線圖的時(shí)候卻用的 cpm 標(biāo)準(zhǔn)化,我后面試了 tmp 算法標(biāo)準(zhǔn)化,也會(huì)出現(xiàn)與 edger 不一致的情況,參考:count轉(zhuǎn)TPM/FPKM實(shí)戰(zhàn)(GSE229904)

edger 算法標(biāo)準(zhǔn)化 TMM 后的表達(dá)矩陣提?。?/span>

library(edgeR)
y <- DGEList(counts = count)
y <- calcNormFactors(y)
counts.tmm.edger <- round(cpm(y), 4)
head(counts.tmm.edger)
head(counts.tmm.edger["ENSG00000037474",c("control-1","control-1","treat-1","treat-2")])

# 對(duì)照組
mean(counts.tmm.edger["ENSG00000037474",c("control-1","control-1")])
# [1] 50.2231

# 實(shí)驗(yàn)組
mean(counts.tmm.edger["ENSG00000037474",c("treat-1","treat-2")])
# [1] 48.92365

這個(gè)時(shí)候要是想展示關(guān)鍵基因的表達(dá)值箱線圖,可以選擇算法內(nèi)部的標(biāo)準(zhǔn)化方法~

今天分享到這。

友情轉(zhuǎn)發(fā):

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多