【问题标题】:Extrapolating variance components from Weir-Fst on Vcftools在 Vcftools 上从 Weir-Fst 推断方差分量
【发布时间】:2015-05-08 10:57:53
【问题描述】:
vcftools --vcf ALL.chr1.phase3_shapeit2_mvncall_integrated_v5.20130502.genotypes.vcf --weir-fst-pop POP1.txt --weir-fst-pop POP2.txt --out fst.POP1.POP2

上述脚本使用 Weir 和 Cokerham 的 1984 公式计算 1000 个基因组种群数据的 Fst 距离。该公式使用了 3 个方差分量,即 a、b、c(种群间;种群内个体间;种群内个体内配子间)。

输出直接提供公式的结果,而不是程序计算得出最终结果的组件。如何让 Vcftools 输出 a,b,c 的值?

【问题讨论】:

    标签: bioinformatics vcf-variant-call-format vcftools


    【解决方案1】:

    如果您可以将数据转换为hierfstat 的格式,则可以从varcomp.glob 获得方差分量。我通常做的是:

    1. 使用vcftools--012 获取基因型
    2. 将 0/1/2/-1 转换为 hierfstat 格式(例如,11/12/22/NA)
    3. 将数据加载到 hierfstat 并计算(见下文)

    R 示例:

    library(hierfstat)
    data = read.table("hierfstat.txt", header=T, sep="\t")
    levels = data.frame(data$popid)
    loci = data[,2:ncol(data)]
    res = varcomp.glob(levels=levels, loci=loci, diploid=T)
    print(res$loc)
    print(res$F)
    

    Fst 对于每个基因座(行)因此是(没有分层设计),来自res$loc:res$loc[1]/sum(res$loc)。如果您有更复杂的抽样,则需要以不同方式解释方差分量。

    --根据您的评论更新--

    我在 Pandas 中执行此操作,但任何语言都可以。这是一个文本替换练习。只需将您的 .012 文件放入数据框并转换如下。我逐行读取 numpy b/c 我有大量的 snps,但 read_csv 也可以。

    import pandas as pd
    import numpy as np
    z12_data = []
    for i, line in enumerate(open(z12_file)):
        line = line.strip()
        line = [int(x) for x in line.split("\t")]
        z12_data.append(np.array(line))
        if i % 10 == 0:
            print i
    z12_data = np.array(z12_data)
    z12_df = pd.DataFrame(z12_data)
    z12_df = z12_df.drop(0, axis=1)
    z12_df.columns = pd.Series(z12_df.columns)-1
    
    hierf_trans = {0:11, 1:12, 2:22, -1:'NA'}
    def apply_hierf_trans(series):
        return [hierf_trans[x] if x in hierf_trans else x for x in series]
    hierf = df.apply(apply_hierf_trans)
    hierf.to_csv("hierfstat.txt", header=True, index=False, sep="\t")
    

    然后,您将该文件 hierfstat.txt 读入 R,这些是您的基因座。您需要在抽样设计中指定您的水平(例如,您的人口)。然后调用 varcomp.glob() 来获取方差分量。如果你想使用它,我有这个here 的并行版本。

    请注意,在这种情况下,您指定 0 作为参考等位基因。也许是你想要的,也许不是。我经常计算次要等位基因频率,并将 2 设为次要等位基因,但这取决于您的研究目标。

    【讨论】:

    • 这是一个非常有用的答案。我现在已经进行了第 1 步。但是,我不知道如何执行第 2 步(将 0/1/2/-1 转换为 hierfstat 格式(例如,11/12/22/NA))。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2014-12-23
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多