數(shù)據(jù)分析:RT-qPCR分析

介紹

做完轉(zhuǎn)錄組分析之后货矮,一般都要求做qRT-PCR來驗證二代測序得到的轉(zhuǎn)錄本表達(dá)是否可靠佃乘。熒光定量PCR是一種相對表達(dá)定量的方法薪贫,他的計算方法有很多艘狭,常用的相對定量數(shù)據(jù)分析方法有雙標(biāo)曲線法,ΔCt法囚霸,2-ΔΔCt法(Livak法)腰根,用參照基因的2-ΔΔCt法(Livak法):

qRT-PCR介紹及計算公式

該部分引用自下方參考鏈接1

qRT-PCR原理

以基因的cDNA為模板進(jìn)行PCR擴(kuò)增,在PCR擴(kuò)增過程中拓型,通過收集熒光信號额嘿,對PCR進(jìn)程進(jìn)行實時檢測。由于在PCR擴(kuò)增的指數(shù)時期劣挫,模板的Ct值和該模板的起始拷貝數(shù)存在線性關(guān)系册养,所以可以定量。

Ct值

Ct值的含義是:每個反應(yīng)管內(nèi)的熒光信號達(dá)到設(shè)定的域值時所經(jīng)歷的循環(huán)數(shù) (cycle)压固。 qRT-PCR在擴(kuò)增的時候都會有平臺期球拦,在平臺期之前,PCR 擴(kuò)增就是簡單的指數(shù)增長,也就是 1 變 2坎炼,2 變 4愧膀,4 變 8 …擴(kuò)增。數(shù)學(xué)形式就是 2 的 ct 次方谣光,到了平臺期所有基因擴(kuò)增的數(shù)目是一致的檩淋,而唯一有區(qū)別的則是 ct 值的不同。所以不難推斷出 ct 值越小萄金,反應(yīng)擴(kuò)增到達(dá)平臺期所需循環(huán)數(shù)越少狼钮,目的基因起始含量越高。這里可以得到公式:

計算 -ΔΔCt:內(nèi)參基因分為對照組和處理組內(nèi)參基因

  1. 先計算對照組和處理組的內(nèi)參基因Ct的均值: Mean_{內(nèi)參基因}=mean(對照組或處理組內(nèi)參基因)

  2. 計算對照組待檢測目的基因減去對照組內(nèi)參基因的平均Ct值:ΔCt_{對照組目的基因i} = Ct_{對照組目的基因i} - Ct_{對照組內(nèi)參基因的平均值}

  3. 計算處理組待檢測目的基因減去處理組內(nèi)參基因的平均Ct值:ΔCt_{處理組目的基因i} = Ct_{處理組目的基因i} - Ct_{處理組內(nèi)參基因的平均值}

  4. 計算基于對照組的-ΔΔCt捡絮,處理組待檢測目的基因的ΔCt減去對照組待檢測基因的ΔCt的平均值:-ΔΔCt_{處理組目的基因i} = ΔCt_{處理組目的基因i} - ΔCt_{對照組目的基因i的平均值}

  5. 相對表達(dá)量計算,也就是相對于對照組: 2^-ΔΔct: 2^{-(-ΔΔCt)}

  6. 條形圖或相關(guān)性點圖可視化結(jié)果

R代碼

加載R包

knitr::opts_chunk$set(warning = F, message = F)
library(dplyr)
library(tibble)
library(ggplot2)
library(xlsx)
library(Rmisc)

R函數(shù)

get_qPCR <- function(dataset=dat,
                     ref_gene="GAPDH",
                     control_group="6H NC",
                     grp=c("6H M1")){
  
  # dataset=dat                   # 初始數(shù)據(jù)
  # ref_gene="GAPDH"              # 內(nèi)參基因名字
  # control_group="6H NC"         # 對照組
  # grp=c("6H M1")                # 實驗組排序
  
  
  if(!any(is.element(colnames(dataset), c("Sample_Name", "Target_Name", "CT")))){
    stop("Check the sheet's colnames")
  }
  sampleid <- c("Sample_Name", "Target_Name", "CT")
  dat <- dataset %>% select(sampleid)
  
  # step1: 計算對照組和處理組的內(nèi)參基因平均值
  dat_ref_gene <- dat %>% filter(Target_Name == ref_gene) 
  ref_gene_mean <- dat_ref_gene %>% group_by(Sample_Name) %>%
    dplyr::summarise(CT_ref_mean = mean(CT))
  
  # step2: 計算對照組和處理組待檢測目的基因減去對應(yīng)分組的內(nèi)參基因的平均Ct值
  dat_gene <- dat %>% filter(Target_Name != ref_gene) 
  dat_gene_merge <- dat_gene %>% inner_join(ref_gene_mean, by = "Sample_Name")
  dat_gene_merge$CT_delta <- with(dat_gene_merge, CT - CT_ref_mean) 
  
  dat_control <- dat_gene_merge %>% filter(Sample_Name == control_group) %>%
    group_by(Sample_Name, Target_Name) %>%
    dplyr::summarise(Delta_CT_control_mean=mean(CT_delta)) %>% 
    dplyr::rename(Sample_Name_control=Sample_Name)
  dat_treat <- dat_gene_merge %>% filter(Sample_Name != control_group) %>%
    # group_by(Sample_Name, Target_Name) %>%
    # dplyr::summarise(Delta_CT_treat_mean=mean(CT_delta)) %>% 
    dplyr::rename(Sample_Name_treat=Sample_Name)
  
  # step3: 計算對照組檢測基因的平均Δ值
  dat_double_delta <- inner_join(dat_treat, dat_control,
                                 by = "Target_Name")
  dat_double_delta$CT_delta_delta <- with(dat_double_delta, CT_delta - Delta_CT_control_mean)
  
  # step4: 基于對照組檢測基因的平均Δ值莲镣,計算實驗組的2-ΔΔCt值
  dat_double_delta$qPCR <- 2^-(dat_double_delta$CT_delta_delta) 
  
  # step5: 條形圖或相關(guān)性散點圖可視化
  dat_plot <- dat_double_delta %>% 
    dplyr::rename(Sample_Name=Sample_Name_treat) %>%
    dplyr::select(Sample_Name, Target_Name, qPCR) 
  dat_plot_bar <- Rmisc::summarySE(dat_plot, measurevar = "qPCR", 
                                   groupvars = c("Sample_Name", "Target_Name")) %>%
    mutate(Sample_Name=factor(Sample_Name, levels = grp),
           Target_Name=factor(Target_Name)) %>% 
    group_by(Sample_Name, Target_Name) %>%
    mutate(ylimit=(qPCR+sd)) %>%
    ungroup()
  
  dat_plot_bar_ymax <- dat_plot_bar %>% 
    group_by(Target_Name) %>% 
    summarise_at(vars(ylimit), max)
  
  # dat_plot_range <- dat_plot %>% group_by(Sample_Name, Target_Name) %>%
  #   summarise(ymin=min(qPCR), ymax=max(qPCR))
  # setting y axis scale
  y_group <- c()
  y_scale <- c()
  for(i in 1:nrow(dat_plot_bar_ymax)){
    y_group <- c(y_group, rep(as.character(dat_plot_bar_ymax$Target_Name[i]), 2))
    y_scale <- c(y_scale, c(0, ceiling(dat_plot_bar_ymax$ylimit[i])))
  }
  blank_data <- data.frame(Target_Name = y_group, 
                           Sample_Name = 1, 
                           qPCR = y_scale)
  
  # step6: visualization
  pl <- ggplot(dat_plot_bar, aes(x=Sample_Name, weight=qPCR))+
    geom_hline(aes(yintercept = qPCR), color = "gray")+
    geom_bar(color = "black", width = .4, position = "dodge")+
    geom_errorbar(aes(ymin = qPCR, ymax = qPCR + se), 
                  width = 0.25, size = 0.5, position = position_dodge(0.7))+
    labs(x="", y=expression(paste(log[2], " fold change in expression")))+ 
    geom_blank(data = blank_data, aes(x = Sample_Name, y = qPCR))+
    expand_limits(y = 0)+
    scale_y_continuous(expand = c(0, 0))+
    facet_wrap(. ~ Target_Name, scales = "free")+
    theme_bw()+
    theme(axis.title = element_text(face = "bold", color = "black", size = 14),
          axis.text = element_text(color = "black", size = 10),
          axis.text.x = element_text(angle = 60, hjust = 1, face = "bold"),
          text = element_text(size = 10, color = "black", family="serif"),
          panel.grid = element_blank(),
          legend.position = "right",
          legend.key.height = unit(0.6, "cm"),
          legend.text = element_text(face = "bold", color = "black", size = 10),
          strip.text = element_text(face = "bold", size = 14))
  res <- list(dat=dat_double_delta, plot=pl)
  return(res)  
}

讀取數(shù)據(jù)

單個樣本三個技術(shù)重復(fù)福稳,檢驗不同的目的基因擴(kuò)增效率

dat <- read.xlsx("qPCR.xlsx", sheetIndex = 1)
head(dat)

計算結(jié)果

qPCR_res <- get_qPCR(dataset=dat,
                     ref_gene="GAPDH",
                     control_group="6H NC",
                     grp=c("6H M1"))
DT::datatable(qPCR_res$dat)

可視化結(jié)果

qPCR_res$plot

結(jié)果: IL-1B 和INOS基因相比NC組而言,其含量越多

同一基因多分組結(jié)果圖

get_qPCR <- function(dataset=dat,
                     ref_gene="Gadph",
                     control_group="2d_Control",
                     grp=c("2d_100uM")){
  
  # dataset=dat                   # 初始數(shù)據(jù)
  # ref_gene="Gadph"              # 內(nèi)參基因名字
  # control_group="2d_Control"    # 對照組
  # grp=c("2d_100uM")             # 實驗組排序
  
  
  if(!any(is.element(colnames(dataset), c("Sample_Name", "Target_Name", "CT")))){
    stop("Check the sheet's colnames")
  }
  sampleid <- c("Sample_Name", "Target_Name", "CT")
  dat <- dataset %>% select(sampleid)
  
  # step1: 計算對照組和處理組的內(nèi)參基因平均值
  dat_ref_gene <- dat %>% filter(Target_Name == ref_gene) 
  ref_gene_mean <- dat_ref_gene %>% group_by(Sample_Name) %>%
    dplyr::summarise(CT_ref_mean = mean(CT))
  
  # step2: 計算對照組和處理組待檢測目的基因減去對應(yīng)分組的內(nèi)參基因的平均Ct值
  dat_gene <- dat %>% filter(Target_Name != ref_gene) 
  dat_gene_merge <- dat_gene %>% inner_join(ref_gene_mean, by = "Sample_Name")
  dat_gene_merge$CT_delta <- with(dat_gene_merge, CT - CT_ref_mean) 
  
  dat_control <- dat_gene_merge %>% filter(Sample_Name == control_group) %>%
    group_by(Sample_Name, Target_Name) %>%
    dplyr::summarise(Delta_CT_control_mean=mean(CT_delta)) %>% 
    dplyr::rename(Sample_Name_control=Sample_Name)
  dat_treat <- dat_gene_merge %>% filter(Sample_Name != control_group) %>%
    # group_by(Sample_Name, Target_Name) %>%
    # dplyr::summarise(Delta_CT_treat_mean=mean(CT_delta)) %>% 
    dplyr::rename(Sample_Name_treat=Sample_Name)
  
  # step3: 計算對照組檢測基因的平均Δ值
  dat_double_delta <- inner_join(dat_treat, dat_control,
                                 by = "Target_Name")
  dat_double_delta$CT_delta_delta <- with(dat_double_delta, CT_delta - Delta_CT_control_mean)
  
  # step4: 基于對照組檢測基因的平均Δ值瑞侮,計算實驗組的2-ΔΔCt值
  dat_double_delta$qPCR <- 2^-(dat_double_delta$CT_delta_delta) 
  
  # step5: 條形圖或相關(guān)性散點圖可視化
  dat_plot <- dat_double_delta %>% 
    dplyr::rename(Sample_Name=Sample_Name_treat) %>%
    dplyr::select(Sample_Name, Target_Name, qPCR) 
  dat_plot_bar <- Rmisc::summarySE(dat_plot, measurevar = "qPCR", 
                                   groupvars = c("Sample_Name", "Target_Name")) %>%
    mutate(Sample_Name=factor(Sample_Name, levels = grp))
  
  # step6: visualization
  pl <- ggplot(dat_plot_bar, aes(x=Sample_Name, weight=qPCR))+
    geom_hline(yintercept = seq(0, round(max(dat_plot_bar$qPCR), 1), 0.2), color = "gray")+
    geom_hline(yintercept = 1, color = "black", linetype = 2, size = 1)+ 
    geom_bar(color = "black", width = .4, position = "dodge")+
    geom_errorbar(aes(ymin = qPCR, ymax = qPCR + se), 
                  width = 0.25, size = 0.5, position = position_dodge(0.7))+
    labs(x="", y=expression(paste(log[2], " fold change in expression")))+    
    scale_y_continuous(breaks = seq(0, round(max(dat_plot_bar$qPCR), 1), 0.2),
        expand = c(0, 0),
        limits = c(0, round(max(dat_plot_bar$qPCR), 1)+round(max(dat_plot_bar$sd), 1)))+
    facet_wrap(. ~ Target_Name, scales = "free")+
    theme_bw()+
    theme(axis.title = element_text(face = "bold", color = "black", size = 14),
          axis.text = element_text(color = "black", size = 10),
          axis.text.x = element_text(angle = 60, hjust = 1, face = "bold"),
          text = element_text(size = 10, color = "black", family="serif"),
          panel.grid = element_blank(),
          legend.position = "right",
          legend.key.height = unit(0.6, "cm"),
          legend.text = element_text(face = "bold", color = "black", size = 10),
          strip.text = element_text(face = "bold", size = 14))
  res <- list(dat=dat_double_delta, plot=pl)
  return(res)  
}

dat <- read.xlsx("qPCR.xlsx", sheetName = "6d")
# 6 days 
qPCR_res <- get_qPCR(dataset=dat,
                     ref_gene="Gapdh",
                     control_group="6d_control",
                     grp=c("6d_100", "6d_300", "6d_1000"))

# 計算結(jié)果
DT::datatable(qPCR_res$dat)

# 可視化結(jié)果
qPCR_res$plot

參考

  1. qRT-PCR相對定量計算詳解

  2. geom_lines in different facet

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載的圆,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末半火,一起剝皮案震驚了整個濱河市越妈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钮糖,老刑警劉巖梅掠,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異店归,居然都是意外死亡阎抒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門消痛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來且叁,“玉大人,你說我怎么就攤上這事秩伞〕汛” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵纱新,是天一觀的道長展氓。 經(jīng)常有香客問我,道長怒炸,這世上最難降的妖魔是什么带饱? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上勺疼,老公的妹妹穿的比我還像新娘教寂。我一直安慰自己,他們只是感情好执庐,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布酪耕。 她就那樣靜靜地躺著,像睡著了一般轨淌。 火紅的嫁衣襯著肌膚如雪迂烁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天递鹉,我揣著相機(jī)與錄音盟步,去河邊找鬼。 笑死躏结,一個胖子當(dāng)著我的面吹牛却盘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播媳拴,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼黄橘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屈溉?” 一聲冷哼從身側(cè)響起塞关,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎子巾,沒想到半個月后帆赢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡线梗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年匿醒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缠导。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡廉羔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出僻造,到底是詐尸還是另有隱情憋他,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布髓削,位于F島的核電站竹挡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏立膛。R本人自食惡果不足惜揪罕,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一梯码、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧好啰,春花似錦轩娶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椰弊,卻和暖如春许溅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秉版。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工贤重, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人清焕。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓游桩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耐朴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • qRT-PCR實驗原理 RT-qPCR由普通PCR技術(shù)發(fā)展而來盹憎,它是在傳統(tǒng)PCR反應(yīng)體系中加入熒光化學(xué)物質(zhì)(熒光染...
    ShawnMagic閱讀 93,839評論 6 95
  • 做完轉(zhuǎn)錄組分析之后筛峭,一般都要求做qRT-PCR來驗證二代測序得到的轉(zhuǎn)錄本表達(dá)是否可靠。熒光定量PCR是一種相對表達(dá)...
    組學(xué)大講堂閱讀 67,010評論 2 73
  • 做定量前應(yīng)該做預(yù)實驗陪每,確定一個合理的模板濃度范圍影晓。15到35CT比較合理,超過35個CT那么就算它沒有擴(kuò)增了檩禾,如果...
    愛吃海椒的妹妹閱讀 1,668評論 0 5
  • qRT-PCR是一種相對表達(dá)定量的方法挂签,他的計算方法有很多,常用的相對定量數(shù)據(jù)分析方法是KJ Livak(Appl...
    組學(xué)大講堂閱讀 10,219評論 1 21
  • 這次盼产,我們來介紹一下qPCR的數(shù)據(jù)處理饵婆。 qPCR是什么操作 qPCR這項技術(shù),被廣泛用于生物學(xué)的研究戏售,只有有以下...
    小折線閱讀 61,769評論 16 67