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的数据整理实用小算法
|
1天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
28天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
28天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
2月前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
29天前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
1月前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。
|
1月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
下一篇
无影云桌面