数据分析:RT-qPCR分析及R语言绘图

news2024/9/20 8:51:03

介绍

转录组分析是一种用于研究细胞或组织中所有RNA分子的表达水平的高通量技术。完成转录组分析后,科学家们通常需要通过定量实时聚合酶链式反应(qRT-PCR)来验证二代测序(Next-Generation Sequencing, NGS)结果的可靠性。这是因为qRT-PCR是一种精确的定量方法,可以用来验证特定基因的表达水平。

荧光定量PCR(Quantitative Real-Time PCR)是一种利用荧光信号来实时监测PCR扩增过程的技术。它允许研究者在PCR反应进行时实时检测DNA的累积量,从而实现对基因表达水平的定量分析。

在进行相对定量分析时,常用的方法之一是双标曲线法(也称为标准曲线法或绝对定量法)。这种方法的基本步骤如下:

  1. 标准曲线的构建:首先,需要通过一系列已知浓度的标准品(通常是目标基因的克隆DNA)进行PCR扩增,以获得一系列的Ct值(阈值循环数,即PCR扩增过程中荧光信号首次超过阈值的循环次数)。然后,将这些Ct值对数转换后与相应的DNA浓度绘制成图,形成标准曲线。
  2. 样本的Ct值测定:接下来,对实验样本进行qRT-PCR,记录目标基因的Ct值。
  3. 相对定量计算:利用标准曲线,根据样本的Ct值计算出样本中目标基因的相对浓度。这通常涉及到将样本的Ct值转换为DNA浓度,然后与标准品的浓度进行比较。
  4. 数据归一化:由于qRT-PCR可能会受到实验操作和样本制备的影响,因此需要使用一个或多个内参基因(通常是表达水平相对稳定的基因)来归一化数据,以消除这些潜在的变异。
  5. 结果表达:最终,研究者会以目标基因相对于内参基因的表达水平来表达结果,通常是以2的幂次方来表示倍数变化。

通过这种方法,研究者可以验证NGS结果的准确性,并进一步探索基因表达的调控机制。ΔCt法,2-ΔΔCt法(Livak法),用参照基因的2-ΔΔCt法(Livak法):

在这里插入图片描述

qRT-PCR介绍及计算公式

该部分引用自下方参考链接1

qRT-PCR原理

以基因的cDNA为模板进行PCR扩增,在PCR扩增过程中,通过收集荧光信号,对PCR进程进行实时检测。由于在PCR扩增的指数时期,模板的Ct值和该模板的起始拷贝数存在线性关系,所以可以定量。

Ct值

Ct值的含义是:每个反应管内的荧光信号达到设定的域值时所经历的循环数 (cycle)。 qRT-PCR在扩增的时候都会有平台期,在平台期之前,PCR 扩增就是简单的指数增长,也就是 1 变 2,2 变 4,4 变 8 …扩增。数学形式就是 2 的 ct 次方,到了平台期所有基因扩增的数目是一致的,而唯一有区别的则是 ct 值的不同。所以不难推断出 ct 值越小,反应扩增到达平台期所需循环数越少,目的基因起始含量越高。这里可以得到公式:

计算 -ΔΔCt:内参基因分为对照组和处理组内参基因

  1. 先计算对照组和处理组的内参基因Ct的均值: M e a n 内参基因 = m e a n ( 对照组或处理组内参基因 ) Mean_{内参基因}=mean(对照组或处理组内参基因) Mean内参基因=mean(对照组或处理组内参基因)

  2. 计算对照组待检测目的基因减去对照组内参基因的平均Ct值: Δ C t 对照组目的基因 i = C t 对照组目的基因 i − C t 对照组内参基因的平均值 ΔCt_{对照组目的基因i} = Ct_{对照组目的基因i} - Ct_{对照组内参基因的平均值} ΔCt对照组目的基因i=Ct对照组目的基因iCt对照组内参基因的平均值

  3. 计算处理组待检测目的基因减去处理组内参基因的平均Ct值: Δ C t 处理组目的基因 i = C t 处理组目的基因 i − C t 处理组内参基因的平均值 ΔCt_{处理组目的基因i} = Ct_{处理组目的基因i} - Ct_{处理组内参基因的平均值} ΔCt处理组目的基因i=Ct处理组目的基因iCt处理组内参基因的平均值

  4. 计算基于对照组的-ΔΔCt,处理组待检测目的基因的ΔCt减去对照组待检测基因的ΔCt的平均值: − Δ Δ C t 处理组目的基因 i = Δ C t 处理组目的基因 i − Δ C t 对照组目的基因 i 的平均值 -ΔΔCt_{处理组目的基因i} = ΔCt_{处理组目的基因i} - ΔCt_{对照组目的基因i的平均值} ΔΔCt处理组目的基因i=ΔCt处理组目的基因iΔCt对照组目的基因i的平均值

  5. 相对表达量计算,也就是相对于对照组: 2^-ΔΔct: 2 − ( − Δ Δ C t ) 2^{-(-ΔΔCt)} 2(ΔΔCt)

  6. 条形图或相关性点图可视化结果

R代码

加载R包

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

R函数

get_qPCR <- function(dataset=dat,
                     ref_gene="GAPDH",
                     control_group="6H NC",
                     grp=c("6H M1")){
  
  # dataset=dat                   # 初始数据
  # ref_gene="GAPDH"              # 内参基因名字
  # 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: 计算对照组和处理组的内参基因平均值
  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: 计算对照组和处理组待检测目的基因减去对应分组的内参基因的平均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: 条形图或相关性散点图可视化
  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)  
}

读取数据

单个样本三个技术重复,检验不同的目的基因扩增效率。数据下载链接:

百度云盘链接: https://pan.baidu.com/s/1W4Uvoy3Z7i9s8dWGOOkKWw
提取码: vh4s

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

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

可视化结果
qPCR_res$plot

结果: IL-1B 和INOS基因相比NC组而言,其含量越多

在这里插入图片描述

参考

  1. qRT-PCR相对定量计算详解

  2. geom_lines in different facet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1840513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

头歌资源库(12)找第K小数

一、 问题描述 二、算法思想 可以使用快速排序算法来解决这个问题。 首先&#xff0c;选择一个基准元素&#xff0c;通常选择序列的第一个元素。 然后&#xff0c;将序列中小于等于基准元素的元素放在基准元素的左边&#xff0c;大于基准元素的元素放在基准元素的右边。 接着…

【精品方案】产业园区数字孪生规划方案(39页PPT)

引言&#xff1a;随着数字化和智能化技术的快速发展&#xff0c;传统产业园区面临着转型升级的重大机遇。数字孪生技术作为一种将物理世界与数字世界紧密结合的创新技术&#xff0c;为产业园区的规划、建设和运营管理提供了全新的解决方案。本方案旨在通过构建产业园区数字孪生…

AI大模型的TTS评测

L-MTL&#xff08;Large Multi-Task Learning&#xff09;Models 是一种大规模多任务学习模型&#xff0c;通过结合 Mixture of Experts&#xff08;MMoE&#xff09;框架与 Transformer 模型&#xff0c;实现对 TTS&#xff08;Text-to-Speech&#xff09;系统中多个评估指标的…

spring01

id和name id只能取一个&#xff0c;name可以取多个&#xff0c;&#xff0c;&#xff0c;不同的bean&#xff0c;&#xff0c;id和name不能重复… name之间可以使用,分隔&#xff0c;也可以使用空格 分隔 <bean class"com.cj.Dog" id"dog02" name&quo…

最新AI智能聊天对话问答系统源码(详细图文搭建部署教程)+AI绘画系统(Midjourney),DALL-E3文生图,TTS语音识别输入,文档分析

一、文章前言 随着人工智能技术的持续进步&#xff0c;AI绘画已经发展成为一个日益成熟的领域。越来越多的人开始尝试使用AI绘画软件来创作艺术作品。尽管这些AI绘画软件对绘画领域产生了显著影响&#xff0c;但它们并不会完全取代画师。与传统手绘不同&#xff0c;AI绘画可以…

【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项

文章目录 前言一、什么是 SMB&#xff1f;&#x1f4e2;二、如何识别中小企业的需求三、中小企业营销活动的类型四、AWS 合作伙伴可获得的其他 AWS 机会4.1 AWS IQ4.2 APN 客户参与 (ACE) 计划 前言 AWS 中小型企业 &#xff08;SMB&#xff09; 能力合作伙伴专注于帮助中小型…

JimuReport 积木报表 v1.7.6 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

数据结构-算法和算法分析

目录 前言一、算法1.1 算法与程序1.2 算法描述方法1.3 算法特性1.4 算法设计的要求 二、算法分析2.1 算法时间效率的度量2.1.1 事前分析方法算法的渐进时间复杂度算法时间复杂度分析例子算法最坏时间复杂度时间复杂度的计算规则 2.2 算法空间效率的度量 总结 前言 程序 数据结…

18V-100V降5V1A恒压WT5117

18V-100V降5V1A恒压WT5117 WT5117 控制器是一个专为开关电源设计的高性能器件&#xff0c;它集成了一个能够承受高达 150V 电压的 MOSFET。这个控制器不仅支持快速启动&#xff0c;还具备低能耗待机模式&#xff0c;这得益于它的内置高压启动和自供电特性。为了在低负载条件下…

一个新的剪辑拼接图片和视频类APP在测试阶段需要测试内容,以iPhone APP为例:

1.UI参照原型图和设计稿 如有改动&#xff0c;需及时沟通 2.iPad转屏、不同iPhone和iPad机型测试 3.黑夜白天模式 2.各功能模块流程需要测试跑通 3.订阅支付模块 a. UI设计是否和设计稿一致 b.涉及订阅的位置都要测试 c.免费试用是否显示&#xff1b;试用结束后&#xff0c…

UnityAPI学习之碰撞检测与触发检测

碰撞检测 发生碰撞检测的前提&#xff1a; 1. 碰撞的物体需要有Rigidbody组件和boxcllidder组件 2. 被碰撞的物体需要有boxcollider组件 示例1&#xff1a;被碰撞的物体拥有Rigidbody组件 两个物体会因为都具有刚体的组件而发生力的作用&#xff0c;如下图所示&#xff0c…

【启明智显产品介绍】工业级HMI芯片Model3芯片详解(二)图像显示

Model3芯片是一款集大容量存储、宽温操作范围及多功能接口于一身的MCU&#xff0c;配备了 2D 图像加速引擎和 PNG 解码/JPEG 编解码引擎&#xff0c;可以满足各类交互设计场景和多媒体互动需求&#xff0c;具有高可靠性、高安全性、高开放度的特点&#xff0c;可以面向于泛工业…

Techviz:XR协作工作流程,重塑远程电话会议新形式

在当今快速发展的数字环境中&#xff0c;无缝远程协作的需求正在成为企业多部门协同工作的重中之重&#xff0c;尤其是对于制造业、建筑和设计等行业的专业人士而言&#xff0c;这一需求更加迫切。传统的远程电话会议协作形式存在着延滞性&#xff0c;已经渐渐跟不上当今快节奏…

场外个股期权通道业务是什么意思?

今天带你了解场外个股期权通道业务是什么意思&#xff1f;场外个股期权业务是指在沪深交易所之外进行的个股期权交易。它是一种非标准化的合约&#xff0c;不在交易所内进行交割。 场外个股期权通道业务&#xff0c;是指投资者通过与场外个股期权机构通道签订合约&#xff0c;购…

Docker私有化仓库Harbor安装流程

1.搭建Docker私有仓库主要有以下几种方式 使用Docker官方提供的Registry镜像&#xff1a;Docker官方提供了一个用于构建私有镜像仓库的Registry镜像&#xff0c;只需将镜像下载并运行容器&#xff0c;然后暴露5000端口即可使用。可以通过修改Docker的配置文件daemon.json&#…

SpringSecurity-入门代码

创建SpringBoot项目 参考文章&#xff1a; 【环境搭建】使用IDEA创建SpringBoot项目详细步骤_idea创建spring boot项目-CSDN博客 编写helloworld代码 RestController public class HelloController {GetMapping("/hello")public String hello(){return "hel…

手写月课表

农历插件&#xff1a;chinese-lunar-calendar - npm&#xff0c;这个插件可以计算农历日期和节气等 安装&#xff1a; npm install --save chinese-lunar-calendar 使用&#xff1a; import { getLunar } from chinese-lunar-calendar;let res getLunar(years, months, da…

4大利好因素释放顺风车市场潜力,嘀嗒出行即将登陆港交所

经历了十多年发展&#xff0c;共享出行行业即将迎来第一个上市公司——专注顺风车和智慧出租车的嘀嗒出行。 近日&#xff0c;嘀嗒出行通过了港交所聆讯&#xff0c;根据招股书&#xff0c;嘀嗒出行2023年顺风车搭乘次数和交易额分别为约1.3亿次和86亿元&#xff0c;同比分别增…

无监督医学图像翻译与对抗扩散模型| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 Unsupervised Medical Image Translation With Adversarial Diffusion Models 无监督医学图像翻译与对抗扩散模型 01 文献速递介绍 多模态成像对于全面评估人体解剖结构和功能至关重要[1]。通过各自模态捕获的互补组织信息&#xff0c;有助于提高诊断准确性并改…

安装免费版的jfrog artifactory oss

1、下载 软件&#xff0c;本案例安装的是 jfrog-artifactory-oss-7.59.11-linux.tar.gz https://releases.jfrog.io/artifactory/bintray-artifactory/org/artifactory/oss/jfrog-artifactory-oss/ 2、解压下载下来的压缩包 tar zxf jfrog-artifactory-oss-7.59.11-linux.tar…