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的数据整理实用小算法
|
7月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
724 0
|
7月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
449 2
|
8月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
261 6
|
8月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
370 3
|
7月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
347 8
|
7月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
400 8
|
7月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。

热门文章

最新文章