GWAS全基因组关联分析实战——基于Plink转换vcf数据为二进制

news2024/12/24 17:07:14

vcf数据是保存变异信息的主要数据格式,plink是进行全基因组关联分析(GWAs)分析的常用工具包,同时提供一系列数据转换、裁剪和遗传统计量计算工具。本文以实际数据提供基因组关联分析方法。

1 数据准备

首先,使用plink将原始的SNP数据(snps_fil.recode.vcf )转换为二进制数据(bimbedfam):
格式转换:

mkdir GWAs_raw
nohup plink --vcf snps_fil.recode.vcf --threads 20 --const-fid --allow-extra-chr --make-bed -out GWAs_raw/snps_fil >> 20231111_vcf_to_bimbedfam.log&

将包含有亲本信息,详细介绍:
更改FID:

plink --bfile GWAs_raw/snps_fil --update-ids POP.FID --allow-extra-chr --make-bed --out GWAs_raw/snps_fil1

本研究包含三种表型信息,需要使用Plink插入原始数据:
添加表型(生态型)信息:

plink --bfile GWAs_raw/snps_fil1 --pheno POP.ecotypes --allow-extra-chr --make-bed --out GWAs_raw/snps_fil1_p

初始SNP数据不包含SNP ID,本文以染色体编号:位置信息作为染色体编号
添加SNP ID:

plink -bfile GWAs_raw/snps_fil1_p --set-missing-var-ids @:# --allow-extra-chr --make-bed --out GWAs_raw/RT_snps

2 关联分析

PLINK--assoc参数是进行关联分析的参数,--adjust将分析的原始P值进行修正,由于研究设计的材料为植物,不涉及性别信息,同时缺少染色体编号(主要是格式不对,现在改比较占用资源,最后更改更方便),因此需要添加--allow-extra-chr--allow-no-sex参数:

plink -bfile GWAs_raw/RT_snps --assoc --adjust --allow-extra-chr --allow-no-sex --out GWAs_raw/RT_snps

将结果中的染色体编号替换为纯数字:

# to substitute chrm ID
bash script/chr_tran.sh GWAs_raw/RT_snps.qassoc.adjusted GWAs_raw/RT_snps1.qassoc.adjusted

添加变异位点位置信息:

# add BP info
nohup bash script/add_BP.sh GWAs_raw/RT_snps1.qassoc.adjusted GWAs_raw/RT_snps2.qassoc.adjusted &

script:
chr_tran.sh:

INPUT=$1
OUT=$2
sed "s/Chrom1/1/g" $INPUT |awk '{print$0}' \
        |sed "s/Chrom2/2/g" |awk '{print$0}' \
        |sed "s/Chrom3/3/g" |awk '{print$0}' \
        |sed "s/Chrom4/4/g" |awk '{print$0}' \
        |sed "s/Chrom5/5/g" |awk '{print$0}' \
        |sed "s/Chrom6/6/g" |awk '{print$0}' \
        |sed "s/Chrom7/7/g" |awk '{print$0}' \
        |sed "s/Chrom8/8/g" |awk '{print$0}' \
        |sed "s/Chrom9/9/g" |awk '{print$0}' \
        |sed "s/Chrom10/10/g" |awk '{print$0}' \
        |sed "s/Chrom11/11/g" |awk '{print$0}' \
        |sed "s/Chrom12/12/g" |awk '{print$0}' > $OUT

add_BP.sh:

INPUT=$1
OUTPUT=$2
while read -r line; do
    fields=($line)
    if [[ ${fields[1]} == "SNP" ]]; then
        echo "$line BP"
    else
        second_column=${fields[1]}
        IFS=':' read -ra values <<< "$second_column"
        new_column_value=${values[1]}
        echo "$line $new_column_value"
    fi
done < $INPUT > $OUTPUT

结果可视化:

nohup Rscript --no-save QQ_man.R >> Manhattan.log&

install.packages("qqman",repos="https://mirrors.tuna.tsinghua.edu.cn/CRAN/",lib="~" ) 
library("qqman",lib.loc="~") 

results_as <- read.table("RT_snps2.qassoc.adjusted", head=TRUE)


##  BONF
#QQ
jpeg("RT_BONF.jpeg")
qq(results_as$BONF, main = "Q-Q plot of GWAS BONF : assoc")
dev.off()
#Manhattan 
jpeg("RT_man_BONF.jpeg")
manhattan(results_as,chr="CHR",bp="BP",p="BONF",snp="SNP", main = "Manhattan plot: assoc BONF")
dev.off()


##  GC
#QQ
jpeg("RT_GC.jpeg")
qq(results_as$GC, main = "Q-Q plot of GWAS GC : assoc")
dev.off()
#Manhattan 
jpeg("RT_man_GC.jpeg")
manhattan(results_as,chr="CHR",bp="BP",p="GC",snp="SNP", main = "Manhattan plot: assoc GC")
dev.off()


##  UNADJ
#QQ
jpeg("RT_UNADJ.jpeg")
qq(results_as$UNADJ, main = "Q-Q plot of GWAS UNADJ : assoc")
dev.off()
#Manhattan 
jpeg("RT_man_UNADJ.jpeg")
manhattan(results_as,chr="CHR",bp="BP",p="UNADJ",snp="SNP", main = "Manhattan plot: assoc UNADJ")
dev.off()


##  HOLM
#QQ
jpeg("RT_HOLM.jpeg")
qq(results_as$HOLM, main = "Q-Q plot of GWAS HOLM : assoc")
dev.off()
#Manhattan 
jpeg("RT_man_HOLM.jpeg")
manhattan(results_as,chr="CHR",bp="BP",p="HOLM",snp="SNP", main = "Manhattan plot: assoc HOLM")
dev.off()

##  FDR_BH
#QQ
jpeg("RT_FDR_BH.jpeg")
qq(results_as$FDR_BH, main = "Q-Q plot of GWAS FDR_BH : assoc")
dev.off()
#Manhattan 
jpeg("RT_man_FDR_BH.jpeg")
manhattan(results_as,chr="CHR",bp="BP",p="FDR_BH",snp="SNP", main = "Manhattan plot: assoc FDR_BH")
dev.off()


##  FDR_BY
#QQ
jpeg("RT_FDR_BY.jpeg")
qq(results_as$FDR_BY, main = "Q-Q plot of GWAS FDR_BY : assoc")
dev.off()
#Manhattan 
jpeg("RT_man_FDR_BY.jpeg")
manhattan(results_as,chr="CHR",bp="BP",p="FDR_BY",snp="SNP", main = "Manhattan plot: assoc FDR_BY")
dev.off()

3 另一种可视化方法

install.packages("CMplot",repos="https://mirrors.tuna.tsinghua.edu.cn/CRAN/",lib="~")
install.packages("qqman",repos="https://mirrors.tuna.tsinghua.edu.cn/CRAN/",lib="~")

library("CMplot")
library("qqman")

results_as <- read.table("Rcau_FDR_BH.assoc", head=TRUE)


CMplot(results_as,plot.type="q", threshold=0.05)

CMplot(results_as,plot.type="m",
	threshold=c(0.01,0.05)/nrow(results_as),
	col=c("grey30","#FFACAA",
		"grey30","grey60",
		"grey30","grey60",
		"grey30","grey60",
		"grey30","grey60",
		"grey30","grey60")
	threshold.col=c('red','black'), 
	threshold.lty=c(1,2),
	threshold.lwd=c(1,1),
	amplify=T, 
	signal.cex=c(1,1),
	signal.pch=c(20,20),
	signal.col=c("red","orange"))

结果:
在这里插入图片描述

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

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

相关文章

微信小程序_02

能够使用WXML模版语法渲染页面结构 数据绑定 1、数据绑定的基本原则 在data中定义数据在WXML中使用数据 2、在data中定义页面的数据 ​ 在页面对应的.js文件中&#xff0c;把数据定义到data对象中即可&#xff1a; Page({data:{//字符串类型的数据info:init data,//数组类…

EXTI (2)

增强版实验简介 EXTI5和EXTI9共享一个中断源 下面的类似 EXTI0到4各自拥有一个中断源 改变引脚 PA0和PA1改变为PA5 和PA6 EXTI的重映射 之前是把PA0映射到EXTI0 PA1映射到EXTI1上 现在是要把PA5和PA6分别映射到EXTI5和6上 EXTI进行初始化 NVIC初始化 编写中断函数 因为EXTI…

STM32与RTOS的整合:实时操作系统在嵌入式开发中的应用

随着各种嵌入式系统应用的日益复杂和对实时性要求的提高&#xff0c;使用实时操作系统&#xff08;RTOS&#xff09;成为嵌入式开发中的一种重要选择。STM32微控制器作为一种强大的嵌入式处理器&#xff0c;与各种RTOS相结合&#xff0c;能够提供更高效、可靠并且易于维护的系统…

【仿真动画】双机器人协作完成一个任务(切割)

场景 动画 两个机器人协同工作完成一个任务需要解决以下几个关键问题&#xff1a; 通信&#xff1a;两个机器人需要能够相互通信&#xff0c;以共享信息&#xff0c;例如位置、姿态、状态等。规划&#xff1a;需要对两个机器人的运动轨迹进行规划&#xff0c;确保两个机器人不会…

老胡的周刊(第115期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 draw-a-ui[2] 利用 tldraw gpt-4-vision ap…

MATLAB算法实战应用案例精讲-【数模应用】漫谈机器学习(二)

目录 几个高频面试题目 机器学习中的模型评价、模型选择与算法选择 基本的模型评估项和技术 Bootstrapping 和不确定性 交叉验证和超参数优化 机器学习的发展历程 知识储备 机器学习常用术语 算法原理 1. 什么是机器学习&#xff1f; 机器学习和人工智能的关系 机…

机器视觉行业,日子不过了吗?都进入打折潮,双11只是一个借口,打广告出新招,日子不好过是真的

我就不上图了&#xff0c;大家注意各个机器视觉公司公众号&#xff0c;为什么打折&#xff1f;打广告也只是宣传手段&#xff0c;进入打折潮&#xff0c;内卷严重&#xff0c;价格战变成白刃战&#xff0c;肯定日子不好过了。

代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组

前言 本期我们来解决动规的经典题型------ 子数组问题 我们还是会使用动规五部曲来解决问题,下面我们仍然列出动规五部曲 1.明确dp数组含义 2.明确dp数组如何推导-递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印dp数组排错 LeetCode T300 最长递增子序列 题目链接:300. 最长…

61基于matlab的GWO算法的参数工具箱,图形界面,目标函数的默认名称为CostFunction。

基于matlab的GWO算法的参数工具箱&#xff0c;图形界面&#xff0c;目标函数的默认名称为CostFunction。如果您查看了CostFunction.m文件&#xff0c;成本函数获取向量&#xff08;[x1 x2…xn]&#xff09;中的变量并返回目标值。可以在该文件中编写目标函数&#xff0c;也可以…

Python实现猎人猎物优化算法(HPO)优化XGBoost分类模型(XGBClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

Js 语句

JavaScript 语句向浏览器发出的命令&#xff0c;语句的作用是告诉浏览器该做什么&#xff1b;分号用于分隔 JavaScript 语句&#xff0c;通常我们在每条可执行的语句结尾添加分号&#xff1b;使用分号的另一用处是在一行中编写多条语句。 JavaScript 语句通常以一个 语句标识符…

深入了解springmvc响应数据

目录 一、前后端分离开发与混合开发 1.1 混合开发模式 1.2 前后端分离模式【重点】 二、页面跳转控制 2.1 通过JSP实现页面跳转 2.2 转发与重定向 三、返回JSON数据 3.1 导包与配置 3.2 使用ResponseBody 四、返回静态资源 4.1 为什么无法直接查询静态资源 4.2 配置…

【机器学习基础】机器学习入门(1)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;专栏介绍&#xff1a; 本专栏的第一篇文章&#xff0c;当然要介绍一下了~来说一下这个专栏的开…

Java设计模式-结构型模式-代理模式

代理模式 代理模式静态代理动态代理JDK动态代理CGlib动态代理 代理模式 创建一个代理对象来控制对原始对象的访问&#xff0c;可以用来扩展原始对象的功能&#xff0c;同时保护原始对象 一般使用代理模式的目的有两个&#xff1a; 保护目标对象增强目标对象 代理模式有两种实现…

msvcr110.dll文件丢失的解决方法

msvcr110.dll是一个动态链接库文件&#xff0c;属于Microsoft Visual C运行时库&#xff08;Runtime Library&#xff09;版本11.0。它包含了在Visual C程序中使用的函数和变量。当一个程序编译完成后&#xff0c;仍然需要一些运行时库来在操作系统上运行。这些库提供了程序所需…

记录一个错误

通过Resource注解&#xff0c;将IStateHandler接口的实现类 StateHandlerImpl注入进来 Resource private IStateHandler stateHandler;Resource注解默认按照名称进行装配&#xff0c;这里抛出异常是因为IStateHandler和StateHandlerImpl都被 Spring 容器管理&#xff0c;在进行…

GPTS应用怎么创建?GPTS无法创建应用很卡怎么办

在首届开发者大会上&#xff0c;OpenAI宣布推出了GPTs功能&#xff0c;也就是GPT Store&#xff0c;类似App Store的应用商店&#xff0c;任何用户都可以去参与创建应用。那么GPTS应用该如何创建?碰到应用无法创建很卡怎么办呢?下面就为大家带来GPTS应用创建图文教程&#xf…

ChatGPT重磅升级 奢侈品VERTU推出双模型AI手机

2023年11月7日,OpenAI举办了首届开发者大会,CEO Sam Altman(山姆奥尔特曼)展示了号称“史上最强”AI的GPT-4 Turbo。它支持长达约10万汉字的输入,具备前所未有的长文本处理能力,使更复杂的互动成为可能。此外,GPT-4 Turbo还引入了跨模态API支持,可以同时处理图片、视频和声音,从…

【C语言】深入解开指针(二)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 &#x1f308;作者寄语 &#x1f308;&#xff1a; 小菜鸟的力量不在于它的体型&#xff0c;而在于它内心的勇气和无限的潜能&#xff0c;只要你有决心&#xff0c;就没有什么事情是不可能的…

[C++]Leetcode17电话号码的字母组合

题目描述 解题思路&#xff1a; 这是一个深度优先遍历的题目&#xff0c;涉及到多路递归&#xff0c;下面通过画图和解析来分析这道题。 首先说到的是映射关系&#xff0c;那么我们就可以通过一个字符串数组来表示映射关系&#xff08;字符串下标访问对应着数字映射到对应的…