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

介绍

转录组分析是一种用于研究细胞或组织中所有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 scaley_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: visualizationpl <- 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.mzph.cn/pingmian/30255.shtml

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

相关文章

多品类第一!海尔智家618战绩出炉

618已经收官&#xff0c;从今年各大平台取消预售机制、简化流程等新动作来看&#xff0c;“回归用户”成为重中之重。而海尔智家从未离开用户&#xff0c;“以用户为中心”始终是海尔智家不变的坚持。 正因如此&#xff0c;今年618&#xff0c;海尔智家又把“第一”收入囊中。…

.NET C# 八股文 代码阅读(一)

.NET C# 八股文 代码阅读&#xff08;一&#xff09; 目录 .NET C# 八股文 代码阅读&#xff08;一&#xff09;1 两种获10000个数的方式&#xff0c;哪种效率更高&#xff1f;为什么&#xff1f;2 请说出以下代码AB谁先打印&#xff0c;AB打印的值分别为多少&#xff1f;3 关于…

Django框架数据库ORM查询操作

Django框架在生成数据库的models模型文件后&#xff0c;旧可以在应用中通过ORM来操作数据库了。今天抽空试了下查询语句。以下是常用的查询语句。 以下查询需要引入django的Sum&#xff0c;Count&#xff0c;Q模块 from django.db.models import Sum,Count,Q 导入生成的mode…

【CPP】直接选择排序、堆排序

目录 1.选择排序1.1简介1.2代码1.3分析 2.堆排序2.1简介2.2代码2.3分析 1.选择排序 1.1简介 思路&#xff1a;遍历一遍&#xff0c;选出最大值和最小值的下标&#xff0c;然后与第一个和最后一个数字交换位置。 1.2代码 1.3分析 最好复杂度&#xff1a;O(N^2) 最差复杂度&am…

振动分析-5-基于CNN的机械故障诊断方法

参考基于CNN的机械故障诊断方法 CNN之图像识别 预训练模型迁移学习&#xff08;Transfer Learning&#xff09; 基于卷积神经网络&#xff08;CNN&#xff09;的深度迁移学习在声发射&#xff08;AE&#xff09;监测螺栓连接状况的应用 参考基于CNN的机械故障诊断所面临的困难和…

win 打包java项目为exe一键部署,包括mysql和redis

需求&#xff1a;打包springboot项目在win系统下执行&#xff0c;并且要一键部署和开机启动 把所需的程序放在同一个文件夹 1.jdk文件夹&#xff1a;自己去下载&#xff0c;jdk8的话拿jre目录好了 2.mysql文件夹&#xff1a;是8.0.36版&#xff0c;270M精简版了 3.redis文件夹…

Python限制输入的数范围:如何避免程序崩溃

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 有时候用户可能会输入一些不符合预期的数值&#xff0c;导致程序崩溃或者产生错误的结果。为了避免这种情况&#xff0c;需要对用户输入的数值进行限制&#xff0c;确保它们在合理的范围内。本文将介绍如何在Python中…

windows桌面运维----第七天

1、运维有哪些方面选择&#xff1a; 1&#xff0c;桌面运维&#xff08;以windows为主&#xff0c;砸个水晶头诸如此类&#xff09; 2&#xff0c;通讯运维&#xff08;电话&#xff09; 3&#xff0c;网络运维&#xff0c;包括&#xff0c;路由&#xff0c;交换&#xff0c;防…

Microsoft AI Day:支持开放合作,普及技术应用,推进行业企业智慧化创新

微软在北京举办以“共创AI创新&#xff0c;智启无限可能”为主题的Microsoft AI Day活动&#xff0c;集中展示了在生成式智能技术加速发展普及的过程中&#xff0c;微软取得的最新技术突破与进展&#xff0c;并同步更新了在Microsoft Build 2024全球开发者大会上发布的一系列Az…

[归档]YOLOv8l在rk3588上量化后的细节

归档备查。这是我第一个成功进行量化的模型&#xff1a; D RKNN: [17:53:26.729] Network Layer Information Table D RKNN: [17:53:26.729] ----------------…

人力资源招聘社会校企类型招聘系统校园招聘小程序

校企社会人力资源招聘小程序&#xff1a;开启高效招聘新时代 &#x1f680;开篇&#xff1a;打破传统&#xff0c;开启招聘新篇章 在快速发展的现代社会&#xff0c;人力资源招聘已经成为企业和学校共同关注的重要议题。为了更高效、便捷地满足双方的招聘需求&#xff0c;一款…

第58章SOCKET:TCP/IP网络基础

58.1 互联网 互联网会将不同的计算机网络连接起来并允许位于网络中的主机相互之间进行通信。互联网的目标是隐藏不同物理网络的细节以便向互联网中的所有主机呈现一个统一的网络架构&#xff0c;TCP/IP已经成了使用最为广泛的协议套件了&#xff0c; 术语Internet被用来指将全球…

【架构师】听说CDN服务把公司账户余额干趴了?我不服

最近老是看到八卦消息 说是某系统用了cdn的加速服务&#xff0c;某些学员一晚上学员几千个小时&#xff08;真好学&#xff09;&#xff0c;结果一晚上就欠费&#xff0c;又是几千大洋没了&#xff0c;吓的我赶紧上链接&#xff08;呸&#xff0c;上控制台看看&#xff09; 关于…

如何通过安全基线做到网络准入

企业在选择网络准入设备时&#xff0c;应当遵循以下步骤和考虑因素&#xff1a; 明确需求 确定组织对网络准入控制的具体需求&#xff0c;包括控制的设备类型、用户数量、网络规模及安全策略等。考虑是否有特定的合规性要求 研究产品功能 研究不同准入设备的功能和特性&…

【网络安全学习】使用Kali做信息收集-01-<域名信息主机信息>

1.收集开源情报 开源情报(Open Source Intelligence&#xff0c;OSINT)是指从各种公开的渠道中寻找和获取有价值的信息 如&#xff1a;互联网、媒体、社交网络、公共数据库等开源情报具有以下特点&#xff1a; - 丰富性&#xff1a;开源情报涵盖了各种类型和领域的信息 - 可…

关于归一化能量与归一化功率(连续与离散+1)

前言&#xff1a; ① 周期信号 与 直流信号 都是功率信号 ②一个信号可以既不是能量信号也不是功率信号&#xff0c;但不可能既是能量信号又是功率信号 归一化能量 对于一个连续时间信号 ( x(t) )&#xff0c;归一化能量 ( E ) 的定义为&#xff1a; E lim ⁡ T → ∞ ∫ −…

macOS聚集搜索功能开启与关闭

按下command空格弹出 使用搜索 关闭搜索 sudo mdutil -a -i off 启用搜索 sudo mdutil -a -i on

深信服科技:2023网络安全深度洞察及2024年趋势研判报告

2023 年&#xff0c;生成式人工智能和各种大模型迅速应用在网络攻击与对抗中&#xff0c;带来了新型攻防场景和安全威胁。漏洞利用链组合攻击实现攻击效果加成&#xff0c;在国家级对抗中频繁使用。勒索团伙广泛利用多个信创系统漏洞&#xff0c;对企业数据安全与财产安全造成了…

【AI】生成式AI服务器最低配置

【背景】 考虑数据安全&#xff0c;又想用AI赋能企业内部的日常工作&#xff0c;答案只有一个&#xff0c;本地部署。 UI采用open-web-ui&#xff0c;模型用Ollama管理&#xff0c;在局域网做成SAAS服务。要组一个服务器&#xff0c;提供部门内部最多30个的API并发。以下为反复…

【Python Cookbook】S02E12 字符串的连接及合并 ‘ ‘.join()

目录 问题解决方案讨论 问题 如果我们想要将很多小的字符串合并成为一个大的字符串&#xff0c;怎么办&#xff1f; 解决方案 如果只是想连接一些字符串&#xff0c;一般使用 操作符即可。 a "is Chicago" b "not Chicago" print(a " " …