假如你的兩個分組真的就是都有且僅有一個樣品該如何做差異分析呢

2021-12-29 生信技能樹

前面的教程:把火山圖做成煙花圖 ,我們批評了一個學員做差異分析時候的錯誤的思路,就是把每個分組裡面的單個樣品簡單粗暴的複製粘貼3次充當生物學重複,會導致計算得到的p值如此的詭異。

exprSet=cbind(
  exprSet[,1:2],
  exprSet[,1:2],
  exprSet[,1:2],
  exprSet[,1:2]

colnames(exprSet)=1:8 

那麼, 假如你的兩個分組真的就是都有且僅有一個樣品,你該如何進行差異分析呢?

當然也是有辦法的,大家在前面的教程:把火山圖做成煙花圖 也看到了大量的留言給出了解決方案!我們就摘選其中最簡單的edgeR包來分享一下。

首先仍然是從查看表達量矩陣和分組信息

這個時候需要參考前面的教程:把火山圖做成煙花圖 ,自己製作  Step01-airwayData.Rdata 這個文件,它裡面存儲了表達量矩陣和分組信息:


rm(list = ls())
options(stringsAsFactors = F) 
# 讀取基因表達矩陣信息
lname <- load(file = "./data/Step01-airwayData.Rdata")
lname  
# 查看分組信息和表達矩陣數據
exprSet <- filter_count
dim(exprSet)
exprSet[1:4,1:4]
group_list
table(group_list)
# 加載包
library(DESeq2)
exprSet = exprSet[,1:2]
group_list=group_list[1:2]

可以看到的是,我們簡單粗暴的選取了這個表達量矩陣的前兩個樣品而已。這樣的話,我們的兩個分組就各自都有且僅有一個樣品啦,這樣的無生物學重複的實驗設計其實也可以勉強做差異分析。

使用 edgeR包 設置 bcv參數來做無重複的差異分析

代碼很簡單, 如下所示:

#加載包
library(edgeR) 
#設置分組信息
exprSet <- DGEList(counts = exprSet, group = group_list)
bcv = 0.1#設置bcv為0.1
et <- exactTest(exprSet, dispersion=bcv^2)
DEG_edgeR=as.data.frame(topTags(et, n = nrow(exprSet$counts)))
head(DEG_edgeR)
write.csv(DEG_edgeR, 'single-sample-deg-result.csv', quote = FALSE)

前面的教程:把火山圖做成煙花圖 裡面我們展示了 DEseq2和limma兩個包,這個時候又出來了  edgeR包 ,其實就大滿貫啦。轉錄組差異分析最常用的3個包,就是它們了。

仍然是繪製火山圖

代碼如下所示:

#篩選上下調,設定閾值
fc_cutoff <- 1.5
pvalue <- 0.05
DEG_edgeR$regulated <- "normal"
loc_up <- intersect(which(DEG_edgeR$logFC>log2(fc_cutoff)),
                    which(DEG_edgeR$PValue<pvalue))
loc_down <- intersect(which(DEG_edgeR$logFC < (-log2(fc_cutoff))),
                      which(DEG_edgeR$PValue<pvalue))
DEG_edgeR$regulated[loc_up] <- "up"
DEG_edgeR$regulated[loc_down] <- "down" 
head(DEG_edgeR)
library(AnnoProbe)
ag=annoGene(rownames(DEG_edgeR),
            ID_type = 'ENSEMBL',species = 'human'
)
head(ag)
DEG_edgeR$ENSEMBL=rownames(DEG_edgeR)

deg_anno=merge(ag,DEG_edgeR,by='ENSEMBL')
head(deg_anno)
library(EnhancedVolcano)
colnames(deg_anno)
EnhancedVolcano(deg_anno,
                lab =deg_anno$SYMBOL,
                x = 'logFC',
                y = 'FDR')

出圖如下所示:

正常火山圖

可以看到這個時候的火山圖其實是非常正常的!

可以跟原始的差異分析做對比

首先查看兩次差異分析:

reulsts_edgeR = deg_anno
colnames(reulsts_edgeR)
load( file = "./data/Step03-DESeq2_nrDEG.Rdata")
reulsts_DEseq2 = deg_anno
colnames(reulsts_DEseq2)

df=merge(reulsts_edgeR[,c(1,2,7,10,11)],
      reulsts_DEseq2[,c(1,8,12,13)],
      by='ENSEMBL')
table(df$regulated.x,df$regulated.y)

如下所示:

> colnames(reulsts_edgeR)
 [1] "ENSEMBL"   "SYMBOL"    "biotypes"  "chr"       "start"     "end"      
 [7] "logFC"     "logCPM"    "PValue"    "FDR"       "regulated" 
> colnames(reulsts_DEseq2)
 [1] "ENSEMBL"        "SYMBOL"         "biotypes"       "chr"           
 [5] "start"          "end"            "baseMean"       "log2FoldChange"
 [9] "lfcSE"          "stat"           "pvalue"         "padj"          
[13] "regulated"   

需要把兩個差異分析結果矩陣合併,然後對比!

       down normal    up
  down       0    355   670
  normal   424  13643   860
  up       719    789     0

可以看到, 上下調居然是反過來了,哈哈哈,可能是前面的代碼沒有設置因子。

我們可以散點圖更加直觀查看,代碼如下所示:

library(ggplot2)
library(ggpubr)
library(ggstatsplot)
p <- ggplot(df, aes(x=df$logFC,
                    df$log2FoldChange))+    
  geom_point()+
  labs(x = "logFC",
       y = "log2FoldChange")+
  scale_color_manual(values=c("blue", "grey","red"))+
  geom_vline(xintercept = c( -1.5,0,1.5),lty=4,col="#ec183b",lwd=0.8) +
  geom_hline(yintercept = c(-1.5,0,1.5 ),lty=4,col="#18a5ec",lwd=0.8) +
  #xlim(-5,5)+
  #ylim(-3,3)+
  theme_ggstatsplot()+
  theme(panel.grid.minor = element_blank(),
        panel.grid.major = element_blank())


效果如下:

散點圖更加直觀查看兩個差異分析結果的對比

還有個韋恩圖,也可以查看兩次差異分析結果的區別:

代碼如下所示:


library(data.table)
library(ggplot2)
library(ggstatsplot)
library(ggvenn)

a <- list( 'edgeR_up'=split(df$ENSEMBL,df$regulated.x)$up,
           'edgeR_down'=split(df$ENSEMBL,df$regulated.x)$down,
           'DEseq2_up'=split(df$ENSEMBL,df$regulated.y)$up,
           'DEseq2_down'=split(df$ENSEMBL,df$regulated.y)$down
          )
p1 <- ggvenn(a, 
             fill_alpha = 0.9,
             fill_color = c('#7fc97f','#beaed4','#fdc086','#ffff99'),
             set_name_size = 5,
             stroke_size = 0.5) 
p1



出圖如下:

韋恩圖查看兩次 差異分析的結果的區別

因為我們前面兩次 差異分析的因子沒有設置,所以這個上下調是反過來的,但是仍然是可以看到,兩次差異分析的結果的一致性比較好!

學徒作業

運行我的代碼,把因子設置好,重新進行散點圖,韋恩圖的繪製!

相關焦點

  • 微生物組間差異分析之LEfSe分析
    首先在多組樣本中採用 非參數因子Kruskal-Wallis秩和檢驗 檢測不同分組間豐度差異顯著的物種;也就是圖中按class1 和class2兩個大的分組,每一行都進行檢驗,初步得到差異物種,通過檢驗的打鉤進入step2檢驗;Step2.
  • 如何檢驗分組回歸後的組間係數差異?
    問題:「假如,都是因變量y對x1和x2回歸,只不過回歸時兩組樣本分別用國有企業、民營企業數據。
  • 一條代碼完成完成無限分組的微生物差異分析
    寫在前面今天是2020年10月6日,這幾天都很忙碌,許多批次的數據需要再次分析和進一步分析,許多材料需要趕出來,百忙之中還有幾位同學的婚禮,確實非南京很難到場
  • 差異分析|DESeq2完成配對樣本的差異分析
    前段時間拿到一個RNA-seq測序數據(病人的癌和癌旁樣本,共5對)及公司做的差異分析結果(1200+差異基因),公司告知用的是配對樣本的DESeq分析。考慮到平時limma和DESeq2包進行差異分析時沒有特別註明是否配對,這配對和非配對有啥區別呢?於是分別嘗試使用limma和DESeq2包的非配對分析,發現得到的差異基因和公司的差距很大。
  • Stata: 如何檢驗分組回歸後的組間係數差異?
    連玉君, 2017, 如何檢驗分組回歸後的組間係數差異?, 鄭州航空工業管理學院學報 35, 97-109. PDF 原文下載問題背景我們想研究的是婦女的工資決定因素是否存種族差異。最為關注的是白人和黑人(相當於把原始數據分成了兩個樣本組:白人組和黑人組)的工資決定因素是否存在差異。分析的重點集中於工齡(ttl_exp)和婚姻狀況(married) 這兩個變量的係數在兩組之間是否存在顯著差異。下面是分組執行 OLS 回歸的命令和結果:
  • 方差分析篇之案例分析1:單因子or兩因子?這不是個問題
    如果無法確認分布,而且重新收集數據比較可能,那就繼續向下分析。這時你可能會有疑問:不正態能繼續做方差分析嗎?    兩種檢驗方法都顯示不是所有的工序都服從正態分布,通常這時候分析就卡殼了,有的人可能直接上非參數檢驗了。    沒關係,有人對此專門做了研究。普林斯頓大學的生物統計學家John H.
  • 簡單使用limma做差異分析
    首先需要說明的是,limma是一個非常全面的用於分析晶片以及RNA-Seq的差異分析,按照其文章所說:limma is an R/
  • 表達差異分析: edgeR簡明中文手冊
    有重複的樣本中,應該不具備生物學意義的外部因素會影響單個樣品的表達,例如中第一批製備的樣品會總體上表達高於第二批製備的樣品,假設所有樣品表達值的範圍和分布都應當相似,需要進行歸一化來確保整個實驗中每個樣本的表達分布都相似。
  • 要分析組間的差異,該如何選擇正確的統計方法?
    再比如,研究績效方案對醫護人員工作效率的影響,工作效率是因變量,績效方案是自變量,包含兩個相互關聯的組別:幹預1(無績效方案)和幹預2(有績效方案)。在該研究中,幹預1和幹預2也不互斥,是針對同一群醫護人員分析有無績效方案的差異,任一位受試者既屬於幹預1,又屬於幹預2。 此外,匹配設計也屬於組內設計。
  • 宏基因組分組統計檢驗:STAMP分析軟體
    截止到2020年8月15日,兩個版本STAMP的引用次數分別達到了719次和1390次。該軟體除了能夠繪製探索性數據分析的降維、相關圖之外,還提供了假設檢驗的差異比較統計分析功能。此外,STAMP採用了圖形化界面,對用戶比較友好。
  • 在線作圖|在線做Metastats組間差異分析
    三個實驗組被表示為 SSc/GI+(具有確定的 SSc 和胃腸道症狀的患者)、SSc/GI-(無胃腸道症狀的 SSc 患者)和 HC(健康對照)。顯著差異用不同的小字母突出顯示(P < 0.05)。
  • 如何讀懂和利用你的微生物多樣性測序結果?
    做過16s測序的小夥伴們都知道測完之後會拿到一份結果報告但這並不代表可以開始寫文章了看似一大堆數據圖表卻不知如何下手這是很多人頭疼的地方那麼怎樣給報告中的數據賦予靈魂讓它真正成為對你有幫助的分析呢?今天我們來詳細解讀下。
  • R語言mRNA差異表達分析
    上一篇文章介紹的是mRNA數據的整理,整理完就開始介紹的是如何用R語言來做差異表達分析,繼續碼字。
  • 如何讀懂和利用你的微生物多樣性測序結果
    做過16s測序的小夥伴們都知道測完之後會拿到一份結果報告但這並不代表可以開始寫文章了看似一大堆數據圖表卻不知如何下手這是很多人頭疼的地方那麼怎樣給報告中的數據賦予靈魂讓它真正成為對你有幫助的分析呢?今天我們來詳細解讀下。
  • 我只知道我的愛情有且僅有一個解答,那就是你
    我們之間的關係像一場遊戲,我練到滿級 ,你刪了遊戲。愛情不是數學題,我不能理性地去演算過程分析利弊,我只知道我的愛情有且僅有一個解答,那就是你。沒有誰會無緣無故的對你好,所有的關心都來源於喜歡。有人喜歡你綁著頭髮的樣子,有人喜歡你披著頭髮的樣子,於是你猶豫到底該綁著還是披著,可是你忽略了,真正喜歡你的人,喜歡你所有的樣子。因為別人的評價,我們磨掉了多少稜角,丟掉了多少獨一無二的性格。在乎的時間愈久,我們就會分不清生命究竟是活給自己看,還是活給別人看。
  • 分析方法 | 分組分析
    一個事物如果只觀察整體的話可能很難發現其中的規律,比如杭州二手房成交均價3.45萬(數據來源於貝殼app),然後你掏空了六個錢包準備了首付來買房結果發現300萬的預算只能買臨安富陽,主城區想都別想從這個🌰中可以看出分組的必要性,當我們把總體中具有不同特性的對象區分開,把特性相同的對象合併在一起,就可以進一步運用各種數據分析方法進行更深入的分析。分組分析主要可以分為文本類分組和數值類分組:文本類分組以事物的屬性特徵來進行分組,如性別、城市、教育水平等;數值類分組以事物的數值特徵來進行分組,如年齡、工資水平等可以進行加減乘除運算的數值。
  • 問卷數據,該如何著手分析呢?
    工作中用到的調研問卷,探索的內容相對具體,涉及的變量也比較少,一般不會用到太複雜的分析方法,Excel+SPSS即可搞定,本文整理了幾類常見的問卷分析思路。拿到一份問卷數據,該如何著手分析呢?且慢,要做分析得先檢查數據是不是完整、可信,所以先從數據清洗開聊。
  • SPSS分組描述統計,真的很簡單易用
    而現實數據中,分組分類數據是常見,因此針對分組/每一組數據的描述統計則成為普遍需要掌握的技能。比如我想知道不同職位等級員工的當前薪金水平。職位等級含經理和非經理兩種,即經理人(管理層)和非經理人(普通職工)工資差異對比。這就是分組的描述統計。依據分組變量,分別考察兩組或多組樣本在某個指標數據的集中趨勢、離散趨勢。
  • 差異分析完整解決方案:Easystat
    非參數檢驗兩個參數代表的意義與方差分析的兩個相同;# ?;sig_show =」abc」是使用字母表示;sig_show =」line」是使用連線和星號表示;如果是NA,那麼就不顯示顯著性結果result:代表顯著性差異分析結果,是一個數據框,第一列是顯著性差異字母,第二列是分組group箱線圖展示方差分析或非參數檢驗結果(aovMuiBoxP)data:輸入數據框,第一列為樣本編號,第二列為分組,注意分組標籤必須設定為group
  • 小帥,你真的會分組微信好友做標籤嗎?
    都知道這個10億人都在用的微信朋友圈,有一個功能叫標籤。那麼標籤可以幹嘛呢?你有好好想過如何分組你的微信好友?怎麼管理好微信朋友圈嗎?這就是我今天要說的。01首先問幾個問題:1、你們現在的朋友圈裡有多少微信好友?都是些什麼人?數量多少,都是從哪裡加來的,怎麼加到的?是被加還是主動加來的?