重测序基因组:Pi核酸多样性计算
如何计算核酸多样性 Pi
本期笔记分享关于核酸多样性pi计算的方法和相关技巧,主要包括原始数据整理、分组文件设置、计算原理、操作流程、可视化绘图等步骤。

基因组Pi核酸多样性(Pi nucleic acid diversity)是一种遗传学研究中用来描述种群内核酸序列多样性的指标,通常用π(pi)符号表示。
它衡量了在一组生物个体的基因组中,不同核苷酸位置上的多态性水平,这种多样性是通过比较不同个体之间的DNA或RNA序列来测定的。
需要输入什么样的数据?
-
样品分组数据
一般在计算pi的时候,需要根据不同亚群或分组来计算,比如高个子和矮个子分成两组,或者按照表性差异、起源地点等分成若干组。
需要将组的样品ID保存为一个txt文档,每行放一个样品ID,不同组的样品放在不同txt文件中。
cat pop1.txt
sample001
sample002
sample006
...
cat pop2.txt
sample012
sample054
sample269
-
基因型数据
需要的基因型数据是VCF格式(常规存储变异信息的一种格式,通常由测序上游分析GATK标准流程获得),其中包含了区间内每个SNP在每个样品的基因型。

如何进行计算?
# 首先加载所需要的R包
library(tidyverse)
library(vcfR)
library(scales)
# 备注:请提前安装vcftools并添加到环境变量
设置参数
# VCF <- "xxx.vcf"
# QTL <- "Gene1"
# SNP <- "MY_SNP_ID"
# mycol <- c("#eb6f51","#20b694","#3560a3","#f8c06f","#004b1c","#5c2d91")
mycol参数可以设置想要的颜色,最终绘图时会根据此参数调整折现颜色。VCF、QTL、SNP根据实际情况进行修改。
group_list <- c("pop1","pop2","pop...")
group_list列表存储亚群或者分组信息,每个亚群分别计算pi然后再合并绘图。
这里可以用任意分组规则,只要能把样品分成一堆一堆就可以,目的是为了研究不同分组之间的差异,还有同一组内的变化趋势。
计算Pi核酸多样性
for (i in group_list){
shell_cmd <- str_c("vcftools",
"--vcf",VCF,
"--keep",str_c(i,".txt"), # 这里会自动读取每个分组文件
"--window-pi","100000", # 100kb窗口
"--window-pi-step","10000", # 10kb步长
"--out",str_c("out_pi/",i),
"",sep = " ")
print(shell_cmd)
system(shell_cmd)
}
这段R语言代码是一个循环,用于执行一系列的系统命令。以下是逐步解释:
for (i in group_list):
遍历名为group_list的列表中的每个元素,将当前元素赋值给变量i,然后执行循环体中的操作。
shell_cmd <- str_c(...):
在每次循环中,创建一个字符串变量shell_cmd,其中包括一系列参数依次进行调用,自动生成命令代码。
print(shell_cmd):
打印当前循环中生成的shell_cmd字符串,以便查看每次循环生成的命令。
system(shell_cmd):
使用system函数执行生成的shell_cmd命令,这将在系统上运行相应的vcftools命令,执行一些与VCF文件处理相关的任务,如计算窗口内的π值。
总之,这段代码的作用是循环遍历group_list中的元素,每次循环生成一个用于运行vcftools命令的字符串shell_cmd,然后执行该命令。
结果可视化
以下R语言代码的目的是创建一个包含数据框(data frame)的列表,并将一些数据加载到这些数据框中,最后将它们合并成一个大的数据框,用于ggplot绘图。
df_plot <- list()
# 创建空列表,并读取数据
for (i in group_list){
df_plot[[i]] <- read_table(str_c("out_pi/",i,".windowed.pi"))
df_plot[[i]][,2] <- df_plot[[i]][,2]/1000000 # 转换物理位置为MB
df_plot[[i]][,6] <- i
colnames(df_plot[[i]])[6] <- "Group"
}
df_plot_all <- bind_rows(df_plot)
以下是每行代码的具体解释信息:
df_plot <- list():首先创建一个空列表df_plot,用于存储数据框。
for (i in group_list):通过for循环遍历group_list中的元素,其中i代表当前循环的元素。
df_plot[[i]] <- read_table(...):在每次循环中,创建一个数据框,并将其存储在df_plot列表中的以i命名的位置。read_table函数用于读取数据文件,文件路径由str_c("out_pi/",i,".windowed.pi")构建,i是当前group_list中的元素。这个数据框包含了从指定文件中读取的数据。
df_plot[[i]][,2] <- df_plot[[i]][,2]/1000000:将df_plot列表中的第i个数据框的第2列数据(可能是物理位置)除以1000000,将其转换为兆字节(MB)。
df_plot[[i]][,6] <- i:在第i个数据框中添加一列,该列的所有值都设置为当前循环的i值,这列通常用于标识数据来源的组。
colnames(df_plot[[i]])[6] <- "Group":将第i个数据框的第6列的列名更改为"Group",以便更清晰地表示这一列的含义。
df_plot_all <- bind_rows(df_plot):最后,使用bind_rows函数将df_plot列表中的所有数据框合并成一个大的数据框df_plot_all,这个数据框包含了来自不同组的数据,每个组的数据位于不同的行中,且具有"Group"列来标识它们所属的组。
绘图
下面这段代码使用ggplot2包创建一个散点拟合曲线图并将图形保存为PDF文件。
p1 <- ggplot(df_plot_all)+
geom_smooth(aes(BIN_START,PI,color=Group),
method = "loess",span = 0.1 ,se = F,linewidth = 1 )+
# geom_line(aes(BIN_START,PI,color=Group),linewidth=1)+
scale_color_manual(values = mycol)+
xlab(str_c("Physical Postion "))+
ylab("Pi")+
ylim(0,0.01)+
theme_bw()+
theme(legend.position = "none")
ggsave(filename = str_c("out_plot/pi_10MB/",QTL,"_",SNP,"_pi_BG_100kwindow_10kstep.pdf"),
plot = p1,width = 8,height = 4)
以下是每行代码的详细解释:
p1 <- ggplot(df_plot_all) +:创建一个ggplot2的图形对象,基于数据框df_plot_all。
geom_smooth(aes(BIN_START, PI, color = Group), method = "loess", span = 0.1, se = F, linewidth = 1):在图形上添加平滑曲线。使用BIN_START列作为x轴,PI列作为y轴,根据不同的Group组别进行着色。曲线平滑方法为loess,span参数控制平滑度,se = F表示不要显示置信区间,linewidth = 1设置曲线的线宽。
scale_color_manual(values = mycol):自定义颜色映射,将mycol中的颜色赋予不同的组别。
xlab(str_c("Physical Position"):设置x轴标签为"Physical Position"。
ylab("Pi"):设置y轴标签为"Pi"。
ylim(0, 0.01):限制y轴的范围,从0到0.01。
theme_bw():应用白底主题,使图形背景为白色。
theme(legend.position = "none"):隐藏图例,因为legend.position设置为"none"。
ggsave(filename = str_c("out_plot/pi_10MB/",QTL,"_",SNP,"_pi_BG_100kwindow_10kstep.pdf"), plot = p1, width = 8, height = 4):最后一行代码保存图形为PDF文件。文件名根据变量QTL和SNP动态生成,保存在指定路径下
以上就是计算核酸多样性并可视化的方法,欢迎您看到这里,如果感觉有用请转发收藏,以备不时之需。
本文由 mdnice 多平台发布
相关文章:

重测序基因组:Pi核酸多样性计算
如何计算核酸多样性 Pi 本期笔记分享关于核酸多样性pi计算的方法和相关技巧,主要包括原始数据整理、分组文件设置、计算原理、操作流程、可视化绘图等步骤。 基因组Pi核酸多样性(Pi nucleic acid diversity)是一种遗传学研究中用来描述种群内…...

C++学习之多态详解
目录 多态的实现 例题 重载 重写 重定义的区别 抽象类 多态实现原理 多态的实现 C中的多态是指,当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。多态意味着调用成员函数时,会根据调用函数的对象的类型来执…...

项目经理之识别项目干系人
项目干系人管理是项目管理中的重要一环,识别和管理好项目干系人是成功实施项目的关键之一。本文将介绍4321项目干系人识别方法、干系人等级册以及五步判断法等工具,帮助项目经理更好地识别和管理项目干系人。同时,本文还将介绍干系人能量方格…...

文件列表创建工具 Nifty File Lists mac中文版功能特色
Nifty File Lists mac是一款文件列表创建工具,全面的元数据支持,涵盖了从基本文件信息,如文件名、路径、大小、创建和修改日期等等内容。 Nifty File Lists mac功能特色 全面的 元数据支持强大的多线程元数据提取系统涵盖了从基本文件信息&a…...

人人自媒体的时候,Ai绘画还值得踏入吗?
前言 先说结论,如果你不打算涉足自媒体,平时也从不上网发什么内容去展示自己的话,其实AI绘画对你来说意义不大。但如果你对自媒体感兴趣,会涉及发作品,发内容,甚至去设计图片,那么AI绘画值得你…...
最近学习内容(2023-10-21)
最近学习内容 Linux编译链接命令一条有用的删除可执行文件的bash命令gcc 在macos 的编译选项,其中-g会生成一个.dSYM文件夹to long don’t read 工具的使用gnu bintuils 的使用,但是很可惜macos上的是Mach-O,不是ELFaxel多线程下载器和其余的…...

Java设计模式 | 基于订单批量支付场景,对策略模式和简单工厂模式进行简单实现
基于订单批量支付场景,对策略模式和简单工厂模式进行简单实现 文章目录 策略模式介绍实现抽象策略具体策略1.AliPayStrategy2.WeChatPayStrategy 环境 使用简单工厂来获取具体策略对象支付方式枚举策略工厂接口策略工厂实现 测试使用订单实体类对订单进行批量支付结…...
【组件专题介绍】什么是组件?
组件定义 卡耐基梅隆大学: 一个不透明的功能实体,能够被第三方组装,且符合一个构件模型。 计算机百科全书: 是软件系统中具有相对独立功能、接口由契约指定、和语境有明显依赖关系、可独立部署、可组装的软件实体。 软件构件…...

Mybatis拦截器
MyBatis插件介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。 MyBatis允许使用者在映射语句执行过程中的某一些指定的节点进行拦截调用,通过织入拦截器,在不同节点修改一些执行过程中的关键属性&…...

【项目设计】网络对战五子棋(上)
想回家过年… 文章目录 一、项目前置知识1. websocketpp库1.1 http1.0/1.1和websocket协议1.2 websocketpp库接口的前置认识1.3 搭建一个http/websocket服务器 2. jsoncpp库3. mysqlclient库 二、 项目设计1. 项目模块划分2. 实用工具类模块2.1 日志宏封装2.2 mysql_util2.3 j…...
【Overload游戏引擎细节分析】鼠标键盘控制摄像机原理
在上文中分析了摄像机类的实现,在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制,从而达到控制摄像机的目的。本文分析一下其控制原理。 Overload的摄像机控制实现在类CameraController中,其有三个个…...

VScode运行SVN拉下来的项目
安装依赖包 pnpm install 启动程序 查看package.json文件中的serve,根据这个启动 pnpm dev 在浏览器使用http://localhost:8848/访问...
jmeter集成kafka测试
Kafka的使用 查看kafka的topic ./kafka-topics --bootstrap-server 10.1.9.84:9092 --list 查看topic信息 ./kafka-topics --bootstrap-server 10.1.9.84:9092 --describe --topic topic_example_1 创建topic 创建topic名为test,分区数为8,副本数为…...

Java面试题-UDP\TCP\HTTP
UDP UDP特性 (1)UDP是无连接的:发送数据之前不需要像TCP一样建立连接,也不需要释放连接,所以减少了发送和接收数据的开销 (2)UDP 使用尽最大努力交付:即不保证可靠交付 ࿰…...

使用WPF模仿Windows记事本界面
本次仅模仿Windows记事本的模样,并未实现其功能。 所有代码如下: <Window x:Class"控件的基础使用.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/…...

【目标检测】Co-DETR:ATSS+Faster RCNN+DETR协作的先进检测器(ICCV 2023)
论文:DETRs with Collaborative Hybrid Assignments Training 代码**:https://github.com/Sense-X/Co-DETR 文章目录 摘要一、简介二、本文方法2.1.概述2.2.协同混合分配训练2.3. 定制的正 Query 生成2.4. Co-DETR为何有效1、丰富编码器的监督2、通过减少…...

iOS QQ登录SDK升级后报错Duplicate interface definition for class ‘TencentOAuth‘修复
起因 最近发现QQ登录SDK sdk-Lite3.3.8 TencentOpenAPI 在部分手机上会崩溃到初始化位置_tencentOAuth [[TencentOAuth alloc] initWithAppId:appid andDelegate:self];, 比如:iPhone6p 版本12.5.4,iPhone8p 版本14.1,iPad版本1…...

laravel中锁以及事务的简单使用
一、首先来说一下什么是共享锁?什么是排他锁? 共享:我可以读 写 加锁 , 别人可以 读 加锁。 排他:只有我 才 可以 读 写 加锁 , 也就是说,必须要等我提交事务,其他的才可以操作。 二、简单例子实现加锁 锁…...

Vue+openlayers+projs4实现坐标转换
一、背景 有一堆点数据,需要在地图上标记,只知参考北京54坐标系或西安80坐标系,但具体是哪种不清楚,这时候就需要坐标转换。ps:EPSG:3857(openlayers参照的坐标系) 二、思路 1、研…...

09 创建型模式-建造者模式
1.建造者模式介绍: 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式 定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不 同的表示。 2.建造者模式要解决的问题 建造者模式可以将部件和其组装过程分开&am…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...