GWAS结果自动批量整理算法(上)

简介: GWAS结果自动批量整理算法

GWAS 结果批量整理

今天分享一个算法,主要是利用R语言对GWAS分析得到的结果进行批量整理,适用于批量筛选关键SNP位点与对应的基因或QTL,尤其是多个表型多个材料的批量分析。

GWAS(全基因组关联分析)是一种常用的遗传学研究方法,用于探索基因与表型之间的关联。它通过对大规模样本集合进行基因组广泛扫描,寻找与特定表型(如疾病、性状等)相关的遗传变异。

GWAS结果示例

通过GWAS分析后会得到一个储存显著SNP的结果文件,假设其命名为“组别.表型.模型.阈值.result.txt”,理论上会有很多个这种格式的文件,文件内容如下:

"INDEX" "SNP" "CHROM" "POS" "REF" "ALT" "Effect" "SE" "trait"
"1" "rs151515" 1 25554 "C" "A" -1.630526 0.39931444 6.688587e-06
"2" "rs32151" 1 72857 "T" "TAC" 0.734972 0.17574796 9.271553e-06

第二列是SNP的位点名称,最后一列是对应的P值,这两个信息非常关键。

整理思路与算法解释

首先,library(tidyverse)加载R包,代码流程均使用优雅的tidy框架。

library(tidyverse)

step1:原始数据整理

大致思路是先读取当前目录下的文件列表,然后依次循环执行计算过程,识别表型、模型、P值等参数,然后传递给筛选函数,并对符合条件的值进行标注,最后会将结果写出为一个csv文件,用于下一步的计算。

id_list <- list.files("./data/",pattern = "*.txt")
for (id in id_list){
file_name <- paste0("./",id)
  atom <- str_split(id,"[.]")
  # Group A  -----
  if (length(atom[[1]]) == 5){ 
    phe <- atom[[1]][1]
    way <- atom[[1]][2] %>% str_replace("Farm","") 
    plast <- atom[[1]][3]
    # 特异性标注P值并将其装换为数字型
    if (plast == "1e-5"){plast <- 6}else{plast <- as.numeric(plast)}
    print(file_name)
    # 计算P值并筛选
    df <- read_delim(file_name,delim = " ",
                     col_types = cols(CHROM = col_character()))
    colnames(df)[9] <- way
    df %>% 
      mutate(log = round(-log10(!!sym(way)),1)) %>% 
      filter(log > plast) ->data
    # 转换染色体编号
    i <- 1
    new <- data.frame(matrix(ncol = 2))
    new <- new[-1,]
    for (x in c(1:7)){
      for (y in c("A","B","D")){
        chr <- paste0(x,y)
        # print(chr)
        new_add <- c(i,chr)
        new <- rbind(new,new_add)
        i <- i + 1
      }
    }
    colnames(new) <- c("CHROM","chr")
    # 替换染色体编号
    data %>% 
      left_join(new,by = "CHROM") ->data2
    data2$loc <- phe
    # 待标注的log值筛选
    data2$logwt <- ifelse(data2$log > 10,paste0('log=',data2$log,sep=""),NA)
    data2$MB <- data2$POS/1000000
    # 写出为中间结果
    write_csv(data2,paste0("./out/1_GWAS_Result_txt2csv/",phe,".",
                           way,".csv"))
  }
}

获取文件列表:

使用list.files()函数,查找目录中所有满足文件名模式为"*.txt"的文件,并将它们的文件名存储在id_list列表中

遍历文件列表:

使用一个循环来遍历id_list中的每个文件名(变量名为id)

文件名解析:

使用str_split()函数,将文件名(id)按照"."分割成多个部分,存储在atom中

条件判断 (Group A):

检查atom中的部分数量是否为5,如果是,进入下一步

变量赋值:

从atom中获取不同部分的值,分别赋给phe、way和plast变量。 对way进行处理,将其中的"Farm"替换为空字符串

特殊值处理:

将plast的值与字符串"1e-5"进行比较,如果相等,将plast设置为6,否则将其转换为数值类型(这里如果需要人工规定阈值则修改此参数)

数据读取与处理:

使用read_delim()函数读取文件内容,并指定列类型。数据将被读入名为df的数据框。 修改df的第9列名称为way。 使用mutate()函数,计算并添加新的"log"列,值为way列的负对数的舍入值。 使用filter()函数,筛选出"log"列大于plast的行,结果存储在名为data的数据框中。

染色体编号转换:

使用两个嵌套循环,生成一个新的数据框new,其中存储了染色体编号的对应关系,生成的new数据框将被用于将染色体编号从数字格式转换为字符格式。

数据处理与替换:

使用left_join()函数,将之前筛选得到的data数据框与new数据框按照"CHROM"列进行连接,结果存储在data2中。 将data2中的"CHROM"列替换为之前提取的phe值。 根据条件,计算并添加"logwt"列和"MB"列。

结果输出:

使用write_csv()函数,将经过处理的data2数据框写入指定路径("./out/1_GWAS_Result_txt2csv/")下,以"phe.way.csv"的格式命名。

相关文章
|
存储 并行计算 算法
GWAS结果自动批量整理算法(下)
GWAS结果自动批量整理算法(下)
|
算法 Linux Python
SGAT丨快捷GWAS结果显著SNP位点归类提取与变异类型转化算法,基于R语言tidyverse
SGAT丨快捷GWAS结果显著SNP位点归类提取与变异类型转化算法,基于R语言tidyverse
|
算法 Linux 数据处理
SGAT丨GWAS得到的结果怎么处理?一种基于tidyverse的数据整理实用小算法
SGAT丨GWAS得到的结果怎么处理?一种基于tidyverse的数据整理实用小算法
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
9天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
10天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
11天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
10天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
10天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
27 3
|
21天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。