zoukankan      html  css  js  c++  java
  • 基于RAINBOW的单倍型全基因组关联分析(haplotype-based GWAS)教程

    Haplotype-based GWAS(单倍型全基因组关联分析)是基于 haplotype (单倍型)进行的关联分析,在基因组层面寻找与表型相关的变异。

    Haplotype 是由一条染色体或线粒体上紧密连锁的多个等位基因组合形成, 每一种组合方式即为一种 haplotype。比如,上图中有 3 个 SNP 和 3 条 染色体,形成了 h1、h2、h3 三种 haplotypes。与单个 SNP 相比,haplotype 提供了更多信息,对定位 causal variant 非常有帮助。

    Haplotype-based GWAS 可以用 HAPSTAT、PLINK v1.07、WHAP 等工具进行,不过这些操作通常比较麻烦。另外,haplotypes 数量会随 SNP 数量增大而急剧增大,这会导致检验统计量的自由度非常大,限制了检验的功效。

    这里,推荐一个比较新的方法:RAINBOW。它无需 haplotype 的先验信息,把 haplotype 作为 SNP-set (多个 SNPs 组成的集合)处理,分析非常方便。

    安装

    RAINBOW 这个方法已经集成在 R 包 RAINBOWR 中。RAINBOWR 不仅可以做基于 SNPs 集的GWAS(SNP-set GWAS),也可以做单个 SNP 的 GWAS(Single-SNP GWAS)、分析上位效应(SNP-set x SNP-set interaction)、绘制曼哈顿图和 QQ Plot,功能非常多。

    RAINBOWR 稳定版可直接通过 CRAN 安装,最新版则需要通过 GitHub(https://github.com/KosukeHamazaki/RAINBOWR):

    #### 稳定版 RAINBOW ####
    install.packages("RAINBOWR")  
    
    #### 最新版 RAINBOW ####
    install.packages("devtools")  
    devtools::install_github("KosukeHamazaki/RAINBOW")
    

    RAINBOWR 依赖其他的一些包,如果安装过程报错,检查一下这些包是否有安装:Rcpp (win 用户则需 Rtools), rgl, tcltk, Matrix, cluster, MASS, pbmcapply, optimx, methods, ape, stringr, pegas, ggplot2, ggtree, scatterpie, phylobase, haplotypes, ggimage

    RAINBOWR 安装失败通常是因为个别包自动安装失败,需要按提示手动安装缺失的包。其中, ggtree 需从 Bioconductor 安装:BiocManager::install("ggtree")

    数据格式

    分析需要三个文件,分别是记录每个个体基因型的文件(geno_score)、基因型位置信息文件(geno_map) 以及表型文件(pheno)。注意,下面的演示例子中,第一行为 header,第一列是行名。

    基因型文件

    基因型文件 geno_score 需要将每个基因型编码为 -1、0、1 的形式,如果按 additive model 计算的话, -1 代表祖先纯合子,0 代表杂合子,1 代表突变纯合子。每一列为一个个体,每一行为一个 SNP 在不同个体中的基因型:

    snp                L1        L2        L3        L4        L5        L6
    id1000223         1         1        -1        -1        -1        -1
    id1000556        -1        -1         1         1        -1         1
    id1000673        -1         1        -1         1        -1         1
    id1000830        -1         1         1         1         1         1
    id1000955        -1         1         1         1        -1         1
    id1001073        -1        -1        -1         1         1        -1
    

    如果不知道怎么转换出基因型文件,可用 plink 的 --recode A 编码成 0、1、2 的方式,用 R 读取结果文件后让每个数字减去 1,再转置一下数据框。

    基因型位置信息文件

    基因型位置信息文件 geno_map 包含每一个 SNP 的名字、染色体和物理位置:

    snp             marker       chr       pos
    id1000223 id1000223         1    420422
    id1000556 id1000556         1    655693
    id1000673 id1000673         1    740153
    id1000830 id1000830         1    913806
    id1000955 id1000955         1   1041748
    id1001073 id1001073         1   1172387
    

    表型文件

    表型文件 pheno 每一行为一个人,每一列为一个表型,可以包含多个表型:

    id      Flowering.time.at.Arkansas Flowering.time.at.Faridpur 
    L1                   75.08333333                         64 
    L3                          89.5                         66 
    L4                          94.5                         67 
    L5                          87.5                         70 
    L6                   89.08333333                         73 
    L7                           105                       <NA> 
    

    分析

    以 RAINBOWR 的实例数据为例:

    加载包:

    require(RAINBOWR)
    

    读取实例数据:

    data("Rice_Zhao_etal")
    Rice_geno_score <- Rice_Zhao_etal$genoScore
    Rice_geno_map <- Rice_Zhao_etal$genoMap
    Rice_pheno <- Rice_Zhao_etal$pheno
    

    过滤 MAF < 0.05 的 SNPs:

    x.0 <- t(Rice_geno_score)
    MAF.cut.res <- MAF.cut(x.0 = x.0, map.0 = Rice_geno_map)
    x <- MAF.cut.res$x
    map <- MAF.cut.res$map
    

    选择分析的表型:

    trait.name <- "Flowering.time.at.Arkansas"
    y <- Rice_pheno[, trait.name, drop = FALSE]
    

    整合转换数据:

    modify.data.res <- modify.data(pheno.mat = y, geno.mat = x, map = map,
                                   return.ZETA = TRUE, return.GWAS.format = TRUE)
    pheno.GWAS <- modify.data.res$pheno.GWAS
    geno.GWAS <- modify.data.res$geno.GWAS
    ZETA <- modify.data.res$ZETA
    

    进行单个 SNP 的 GWAS,以前 4 个 主成分和亲缘关系 ZETA 进行校正,并绘制曼哈顿图和 QQ 图:

    normal.res <- RGWAS.normal(pheno = pheno.GWAS, geno = geno.GWAS,
                               plot.qq = TRUE plot.Manhattan = TRUE
                               ZETA = ZETA, n.PC = 4, P3D = TRUE, count = FALSE)
    

    进行 SNP-Set GWAS,以前 4 个 主成分和亲缘关系 ZETA 进行校正,并绘制曼哈顿图和 QQ 图:

    SNP_set.res <- RGWAS.multisnp(pheno = pheno.GWAS, geno = geno.GWAS, ZETA = ZETA, plot.qq = TRUE, plot.Manhattan = TRUE, count = FALSE, n.PC = 4, test.method = "LR", kernel.method = "linear", gene.set = NULL, test.effect = "additive", window.size.half = 5, window.slide = 11)
    

    对于一个给定的 SNP,它对应的 SNP set 大小是 2 * window.size.half + 1,也就是说 SNP set 是以一个 SNP 为中心,上下游各自拓展 window.size.half 个SNPs。参数 window.slide 控制了中心 SNP 滑动的步长,如果要 SNPs 分成 bin,可以按 window.slide = 2 * window.size.half + 1 设定。

    在上面的这个例子中,SNP-set大小是 11,滑动步长也是 11 个 SNPs。

    查看 SNP-Set GWAS结果,结果第 4 列为 负对数转换后的值 -log10(p):
    ···
    See(SNP_set.res$D)
    ···

    SNP-set 也可以通过通过 gene.set 参数自行指定:

    gene (or haplotype block) 	marker
    gene_1 	id1000556
    gene_1 	id1000673
    gene_2 	id1000830
    gene_2 	id1000955
    gene_2 	id1001516
    … 	…
    

    FAQ

    提示 configure: error: gdal-config not found or not executable 报错
    需要安装 GDAL(https://gdal.org/index.html),可使用conda安装:conda install -c conda-forge gdal

    安装 ggtree 报错 package ‘ggtree’ is not available for this version of R,是因为 ggtree 需要通过 Bioconductor 安装:

    if (!requireNamespace("BiocManager", quietly = TRUE))
        install.packages("BiocManager")
    
    BiocManager::install("ggtree")
    

    ggimage 安装过程中报错 ERROR: compilation failed for package ‘magick’,需安装 Magick++。可直接用 conda 安装:conda install -c conda-forge imagemagick

    参考

    1. Multi-SNP haplotype analysis methods for association analysis (DOI: 10.1007/978-1-4939-7274-6_24)
    2. https://cran.r-project.org/web/packages/RAINBOWR
    3. https://github.com/KosukeHamazaki/RAINBOWR

  • 相关阅读:
    IOS Charles(代理服务器软件,可以用来拦截网络请求)
    Javascript中addEventListener和attachEvent的区别
    MVC中实现Area几种方法
    Entity Framework Code First 中使用 Fluent API 笔记。
    自定义JsonResult解决 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
    序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
    An entity object cannot be referenced by multiple instances of IEntityChangeTracker 的解决方案
    Code First :使用Entity. Framework编程(8) ----转发 收藏
    Code First :使用Entity. Framework编程(6) ----转发 收藏
    Code First :使用Entity. Framework编程(5) ----转发 收藏
  • 原文地址:https://www.cnblogs.com/shiyanhe/p/14322200.html
Copyright © 2011-2022 走看看